首页 > 其他分享 >The 2022 ICPC Asia Hangzhou Regional Programming Contest

The 2022 ICPC Asia Hangzhou Regional Programming Contest

时间:2024-11-07 21:21:00浏览次数:1  
标签:return gcd Contest int sum Regional Programming exgcd mod

A. Modulo Ruins the Legend
\(题目即求(sum+n*s+(n+1)*n/2*d)\equiv \mod m的最小值\)
\(由裴蜀定理可得n*s+(n+1)*n/2*d=gcd(n,(n+1)*n/2)\)
\(令p=gcd(n,n*(n+1)/2)\)
\(可以表示为(sum+k*p+t*m)\equiv \mod m\)
\(令g=gcd(p,m)\)
\((sum+g*z)%m\)
\(sum+g*z>=m时存在最小值\)
\(因为g*z相当于可以表示出所有可以被%m表示出的值\)
\(所以只需要计算第一个刚好越过的值即可\)

点击查看代码
int exgcd(int a,int b,int &x,int &y){
    if(!b){
        x=1,y=0;return a;
    }
    int ans= exgcd(b,a%b,y,x);
    y=y-(a/b)*x;
    return ans;
}
int inv(int x) { return qpw(x, mod - 2); }
void solve(){
    int n,m,x,y;cin>>n>>m;
    int sum=0;
    for(int i=1;i<=n;i++)cin>>x,sum+=x;
    sum%=m;
    int s,d;int p=exgcd(n,n*(n+1)/2,s,d);
    int t,k;
    int g=exgcd(p,m,k,t);
    int z=(m-sum+g-1)/g;
    cout<<z*g+sum-m<<'\n';
    k=k*z%m;
    s=(s*k%m+m)%m,d=(d*k%m+m)%m;
    cout<<s<<" "<<d<<'\n';
}

标签:return,gcd,Contest,int,sum,Regional,Programming,exgcd,mod
From: https://www.cnblogs.com/archer233/p/18534019

相关文章

  • AtCoder Beginner Contest 378 ——F
    https://atcoder.jp/contests/abc378/tasks/abc378_fhttps://atcoder.jp/contests/abc378/editorial/11307#include<bits/stdc++.h>#definexfirst#defineysecond#defineall(x)(x).begin(),(x).end()#definelowbit(x)(x)&-(x)usingnamespacestd;ty......
  • AtCoder Beginner Contest 284题解
    AtCoderBeginnerContest284A没有什么难点,反着输出一遍就可以了。#include<bits/stdc++.h>usingnamespacestd;stringa[2000];intmain(){ intn; cin>>n; for(inti=1;i<=n;i++)cin>>a[i]; for(inti=n;i;i--)cout<<a[i]<<'\n';......
  • AtCoder Beginner Contest 378
    ContestLink还得加练。A&B&C&D不具备任何思维含量。SubmissionASubmissionBSubmissionCSubmissionDE注意到它计算答案的式子,每个子区间和都需要取模,否则就是沙币题了,可以对于每个位置\(O(1)\)地统计答案扫过去然后\(\bmodM\)。常规地,记\(S_i=\sum......
  • 2024 CCPC Liaoning Provincial Contest
    tot:赛时是6题723罚时,还是差劲了。省赛,特别是这场省赛,难度低很多。前面4,5题都是签到题。第六题是一个关于闰年的容斥,脑子乱了,然后越来越绕。然后就没出。出的是一个诈骗题,题面引导你这是计算几何,但是实际上是简单dp,暴力o(n^2)预处理一下就行了。赛时还想着求凸包然后旋转卡壳求......
  • AtCoder Beginner Contest 360 - VP记录
    A-AHealthyBreakfast高桥日常出境。头一次知道getchar()的返回值是int。点击查看代码#include<cstdio>usingnamespacestd;intmain(){ chars[3]={getchar(),getchar(),getchar()}; if(s[0]=='R'&&s[1]=='M')puts("Yes"); els......
  • AtCoder Beginner Contest 378 E
    https://atcoder.jp/contests/abc378/tasks/abc378_ehttps://atcoder.jp/contests/abc378/editorial/11300#include<bits/stdc++.h>#definexfirst#defineysecond#defineall(x)(x).begin(),(x).end()#definelowbit(x)(x)&-(x)usingnamespacestd;ty......
  • AtCoder Beginner Contest 378
    AtCoderBeginnerContest378总结A直接模拟,存\(1\)到\(4\)出现个数。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map&g......
  • MU5IN160 – Parallel Programming
    SorbonneUniversité–SESIM2——–MU5IN160–ParallelProgrammingHands-onSession6–DataflowforMotionApplicationVeryimportant,aboutthesubmissionofyourworkAttheendofthissessionyouwillhavetouploadthefollowingfilesonMoodle:1......
  • AtCoder Beginner Contest 378
    ABC378光速切掉前四题,结果倒在了第五题。A-Pairing难度:红。弱智题,不解释。#include<bits/stdc++.h>usingnamespacestd;intmain(){inta[5]={0};for(inti=1;i<=4;i++){intx;cin>>x;a[x]++;}intans=0;for(inti=1;i<=4;i++){......
  • AtCoder Beginner Contest 378 F题题解
    题目:F-AddOneEdge2思路:可以发现题目就是要我们找出有多少个点对满足连成后是一个简单环环上的点度都为3因为是一个简单图所以不可以有重边和自环那么就代表着这个环肯定是由两个度为2的点和大于1个度为3的点组成的注意到两个点的最近公共祖先一定可以跟这两个点形......