比赛 201712练习 评测结果 AAAAAAAAAA
题目名称 荒岛野人 最终得分 100
用户昵称 WHZ0325 运行时间 0.606 s
代码语言 C++ 内存使用 0.29 MiB
提交时间 2018-01-08 20:25:00
显示代码纯文本
#include <cstdio>
#include <cctype>
#include <cstdlib>
#include <algorithm>
using namespace std;
int n,c[20],p[20],l[20];
void read(int &ans) {
	bool flag=false;
	char c=getchar();
	while(!isdigit(c)) {
		if(c=='-') flag=true;
		c=getchar();
	}
	ans=0;
	while(isdigit(c)) {
		ans=ans*10+c-'0';
		c=getchar();
	}
	if(flag) ans=-ans;
}
int gcd(int a,int b) {return b==0?a:gcd(b,a%b);}
void exgcd(int a,int b,int &x,int &y) {
	if(b==0) x=1,y=0;
	else exgcd(b,a%b,y,x),y-=a/b*x;
}
bool check(int num) {
	for(int i=0;i<n;++i) {
		for(int j=i+1;j<n;++j) {
			int a=p[i]-p[j],b=num,ci=c[j]-c[i];
			int t=gcd(a,b);
			if(ci%t==0) {
				a/=t;b/=t;ci/=t;
				int x,y;
				exgcd(a,b,x,y);
				b=abs(b);
				x=(ci*x%b+b)%b;
				if(x==0) x=b;
				if(x<=min(l[i],l[j])) return false;
			}
		}
	}
	return true;
}
int main() {
	freopen("savage.in","r",stdin);
	freopen("savage.out","w",stdout);
	read(n);
	int begin=0;
	for(int i=0;i<n;++i) read(c[i]),read(p[i]),read(l[i]),begin=max(begin,c[i]);
	int i;
	for(i=begin;!check(i)&&i<1000000;++i);
	printf("%d\n",i);
	fclose(stdin);
	fclose(stdout);
	return 0;
}