枚举m,exgcd验证
复杂度不对,不知道为什么能过。。。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,mx;
int c[21],p[21],l[21];
void exgcd(int &x,int &y,int &d,int a,int b)
{
if(b==0){x=1;y=0;d=a;return;}
exgcd(y,x,d,b,a%b);
y-=a/b*x;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&c[i],&p[i],&l[i]);
mx=max(mx,c[i]);
}
for(int m=mx;;m++)
{
int flag=0;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
int t1=((p[i]-p[j])%m+m)%m,t2=((c[j]-c[i])%m+m)%m;
int x,y,d;
exgcd(x,y,d,t1,m);
if(t2%d)continue;
x=x*(t2/d);
int t=m/d;x=(x%t+t)%t;
if(x<=min(l[i],l[j])){flag=1;break;}
}
if(flag)break;
}
if(!flag)return printf("%d\n",m),0;
}
return 0;
}