代码求条
查看原帖
代码求条
211568
AyanamiLea楼主2024/8/21 00:03

这是我的板子但是它对于样例输出的是错的。

谢谢!

#include <iostream>
using namespace std;
typedef long long ll;
const int N=1e7+5;
int n;
ll a[N],r[N];
template<typename inte>
inte gcd(inte a,inte b){
    return b==0?a:gcd(b,a%b);
}
template<typename inte>
void exgcd(inte a,inte b,inte &x,inte &y){
    if(b==0) x=1,y=0;
    else exgcd(b,a%b,y,x),y-=a/b*x;
}
template<typename inte>
inte abs(inte x){
    return x>=0?x:-x;
}
template<typename inte>
inte exCRT(int n,inte a[],inte r[]){
    inte a0=a[1],r0=r[1];
    for(int i=2;i<=n;++i){
        inte a1=a[i],r1=r[i],h0,h1,g=gcd(a0,-a1);
        if((r1-r0)%g!=0) return -1;
        exgcd(a0,-a1,h0,h1),h0=h0*(r1-r0)/g;
        r0=a0*h0+r0,a0=a0*a1/abs(g);
        cerr<<a0<<' '<<r0<<endl;
    }
    return (r0+a0)%r0;
}
int main(){
    while(cin>>n){
        for(int i=1;i<=n;++i) cin>>a[i]>>r[i];
        cout<<exCRT(n,a,r)<<endl;
    }
    return 0;
}
2024/8/21 00:03
加载中...