也是复习题了 傻逼衣叉还我一等
两个野人无法相遇当
Ci+Pi*x=Cj+Pj*x (mod m)(Pi-pj)*x=Cj-Ci (mod m) 无解 或 最小正整数解>min(Li,Lj) 转换一下 (Pi-pj)*x+m*y=Cj-Ci要约一个最大公因数(不约居然会T囧)
#include#include #include #include #include #include using namespace std;int exgcd(int a,int b,int &x,int &y){ if(a==0) { x=0;y=1; return b; } else { int tx,ty; int d=exgcd(b%a,a,tx,ty); x=ty-(b/a)*tx; y=tx; return d; }}int gcd(int a,int b){ if(a==0)return b; else return gcd(b%a,a);}int c[20],p[20],l[20];int main(){ int n,m=0; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d%d",&c[i],&p[i],&l[i]); m=max(m,c[i]); } while(1) { bool bk=true; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { int A=p[i]-p[j],B=m,K=c[j]-c[i]; int t=gcd(A,B); if(K%t==0) { int x,y; A/=t,B/=t,K/=t; int d=exgcd(A,B,x,y); B=abs(B); x=((x*K/d)%(B/d)+(B/d))%(B/d); if(x<=min(l[i],l[j])){bk=false;break;} } } if(bk==false)break; } if(bk==true){printf("%d\n",m);break;} m++; } return 0;}