记录编号 454202 评测结果 AAAAWAAAAA
题目名称 [NOI 2002]荒岛野人 最终得分 90
用户昵称 Gravatartest 是否通过 未通过
代码语言 C++ 运行时间 0.687 s
提交时间 2017-09-28 17:14:28 内存使用 0.31 MiB
显示代码纯文本
//YPZ_YPZ_YPZ_YPZ_YPZ
#include<bits/stdc++.h>
#define ll long long
#define RG register
#define il inline
#define inf 707406378
#define rep(i,a,b) for(register int i=a;i<=b;++i)
#define file(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std;
const int N=16;
int C[N],P[N],L[N],M,n;

il int gi() {
    RG int res=0,f=1;RG char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
    if(ch=='-')f=-1,ch=getchar();while(ch>='0'&&ch<='9') res=res*10+ch-'0',ch=getchar();
    return res*f;
}

int exgcd(int a,int b,int &x,int &y){
    if(!b){x=1;y=0;return a;}
    int z=exgcd(b,a%b,x,y),tmp;
    tmp=x;
    x=y;
    y=tmp-a/b*y;
    return z;
}

int main(){
    file("savage");
    n=gi(); rep(i,1,n) C[i]=gi(),P[i]=gi(),L[i]=gi();
    rep(i,1,n) if(C[i]==M) C[i]=0;
    int a,b,c,g;
    for(M=1;;M++){
	bool f=1;
	for(RG int i=1;i<n;i++) {
	    for(RG int j=i+1;j<=n;j++){
		int u=i,v=j;
		if(P[u]>P[v]) swap(u,v);
		a=P[u]-P[v],b=M,c=C[v]-C[u];
		a=(a%M+M)%M,c=(c%M+M)%M;
		int x,y;
		g=exgcd(a,b,x,y);
		if(c%g)continue;
		int k=c/g;
		x*=k,y*=k;
		int b2=b/g;
		x=(x%b2+b2)%b2;// 最小正整数解;
		if(x<=min(L[i],L[j])){f=0;break;}
	    }
	    if(!f)break;
	}
	if(f) {printf("%d",M);return 0;}
    }
    return 0;
}