首页 > 其他分享 >ICPC2022Hangzhou A Modulo Ruins the Legend 题解

ICPC2022Hangzhou A Modulo Ruins the Legend 题解

时间:2023-12-03 12:33:29浏览次数:35  
标签:gcd 题解 sum ICPC2022Hangzhou k1 1g Ruins LL mod

Link

ICPC2022Hangzhou A Modulo Ruins the Legend

Question

求 $$\sum\limits_{i=1}^n a_i+n\times s+\frac{n(n+1)}{2}\times d \mod m$$ 的最小值

Solution

我们把这个式子看成一一个二元不定方程

\(ax+by+sum \mod m\) 的最小值,其中 \(a=n,b=\frac{n(n+1)}{2},sum=\sum\limits_{i=1}^n a_i\)

先来看 \(ax+by (ax+by>0) \mod m\) 下的最小值

根据裴蜀定理可得

\[ax+by=k_1 \times \gcd(a,b) \]

设 \(g_1=\gcd(a,b),g2=\gcd(a,b,m)\)

式子就转化为求 \(k_1g_1 (k_1g_1>0)\mod m\) 的最小值

由于 \(k_1g_1 \mod m \Leftrightarrow k_1g_1+tm\)

根据裴蜀定理可得

\[k_1g_1+tm=k_2\times g_2 \]

这个值一定大于零,所以 \(k_2>0\) 由于需要 \(k_1g_1 \mod m\) 最小,则 \(k_2\) 取 \(1\),则最小值就是 \(g_2\)

加入 \(sum\) 之后,也就是改一下最终的式子

\[sum+k_2g_2=ans \]

这里的 \(k_2\) 没有 \(k_2>0\) 的限制,只需要 \(sum +k_2g_2>0\) 就好了,即

\[ans=sum \mod g_2 \]

如何求 \(x,y\) ?

用拓展欧几里得求出 \(k_1,t\) 然后再用一次拓展欧几里得求出 \(x,y\)

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL  exgcd(LL a,LL b,LL &x,LL &y){
    if(!b){x=1,y=0;return a;}
    LL d=exgcd(b,a%b,y,x);
    y-=(a/b)*x;
    return d;
}
int main(){
    freopen("A.in","r",stdin);
    LL N,M,sum=0;
    cin>>N>>M;
    for(int i=0;i<N;i++){
        LL x;cin>>x;sum+=x;
    }
    LL a,b,x,y,k1,t;
    a=N,b=N*(N+1)/2;
    LL g1=__gcd(a,b),g2=__gcd(g1,M);
    LL ans=sum%g2;

    exgcd(g1,M,k1,t);
    k1*=((ans-sum)/g2)%M;
    k1%=M;

    exgcd(a,b,x,y);
    x*=k1,y*=k1;

    cout<<ans<<endl;
    cout<<(x%M+M)%M<<" "<<(y%M+M)%M<<endl;
    return 0;
}

标签:gcd,题解,sum,ICPC2022Hangzhou,k1,1g,Ruins,LL,mod
From: https://www.cnblogs.com/martian148/p/17872833.html

相关文章

  • ucup nanjing 题解
    比赛链接D收获很大的一道题首先考虑朴素的\(dp\),令\(f_{x,i}\)为\(x\)子树中的每一个叶子到\(x\)的距离都为\(i\)的最小代价不难列出\(dp\)式子为:\(f_{x,i}=\min\limits_{i\in\{0,1\}}\{cost(u,i)+\sum\limits_{v\inson(u)}f_{v,x-i}\}\),其中\(cost(u,i)\)为把......
  • CF1288题解
    CF1288EducationalCodeforcesRound80(RatedforDiv.2)A略CF1288BlinkCF1288B题意给定\(A,B\),问有多少个二元组\((a,b)\)满足\(1\lea\leA,1\leb\leB\)且\(a\cdotb+a+b=\operatorname{conc}(a,b)\)。其中\(\operatorname{conc}(a,b)\)表示将\(a,b\)......
  • [ABC017D] サプリメント 题解
    题目传送门~一道DP前缀和优化好题。题目分析首先,朴素DP非常好想。可以从后向前考虑,设\(f_i\)表示从第\(i\)个补品开始的摄取方法数。摄取一个补品:\(f_i=f_{i+1}\)摄取两个补品:\(f_i=f_{i+2}\)以此类推。则转移方程为:\[f_i=f_{i+1}+f_{i+2}+\dots+f_{j......
  • P4143 采集矿石 题解
    题目传送门给出字符串\(s\),以及数组\(a_1\sima_{|s|}\)。定义一个子串的排名为:字典序比它大的本质不同的子串个数\(+1\)。定义一个子串\(s[l,r]\)的权值为\(\sum\limits_{i=l}^ra_i\)。求有多少个子串的排名等于权值。\(|s|\le10^5,0\lea_i\le1000\)。......
  • java: 未报告的异常错误java.io.UnsupportedEncodingException; 必须对其进行捕获或声
    原问题代码:/**MD5编码相关的类@authorwangjingtao*/publicclassMD5{//首先初始化一个字符数组,用来存放每个16进制字符privatestaticfinalchar[]hexDigits={'0','1','2','3','4','5','6','7'......
  • CF1790F题解
    思路令$dis_i$为离$i$最近的黑点距离,$ans$是距离最近的一对黑点距离,我们可以发现,每次$i\getsi+1$后$ans$的更新只会与$dis_{c_i}$有关,因为$c_i$是新的黑点,然后再从$c_i$来一次BFS更新$dis_i$即可。更详细的在注释。代码#include<bits/stdc++.h>......
  • [题解]AT_abc224_e [ABC224E] Integers on Grid
    比较符合CCF造数据水平的题。思路首先可以用两个vector<pair<int,int>>v[N]分别将每一行、每一列的元素的权值与编号存储下来。那么可以对所有的\(v_i\)按照权值从小到大排序。那么发现对于所有的满足v[i][p].fst<v[i][q].fst的\((p,q)\)都可以建一条从\(p\)指......
  • CSP第31次认证题解 2023.9
    A、坐标变换(其一)样例输入3210100010-201-100样例输出21-1120-10题解按照题目,一个循环即可#include<bits/stdc++.h>usingnamespacestd;#defineN200010#definelllonglongtemplate<classT>inlinevoidread(T&a){Tx=0,s=1;......
  • 使用Navicat For MSSQL连接绿色版SQLServer2008R2问题解决
    问题1、创建连接时出现错误:[IM002][Microsoft][ODBC驱动程序管理器]未发现数据源名称并且未指定默认驱动程序(0)Navicat来连接SQLserver,这里确实有点麻烦,出现错误[IM002][Microsoft][ODBC驱动程序管理器]未发现数据源名称并且未指定默认驱动程序(0),解决方法:进入Navicat的安装......
  • CF1368题解
    CF1368CodeforcesGlobalRound8ABC略。CF1368DlinkCF1368D题意给定\(n\)个非负整数\(a_1,\cdots,a_n\)。你可以进行如下操作:选择两个不同的下标\(i,j\)满足\(1\leqi,j\leqn\),并将\(a_i\getsa_i\\mathsf{AND}\a_j,\a_j\getsa_i\\mathsf{OR}\a_j\),两个赋值......