比赛 |
201712练习 |
评测结果 |
AAAAAAAAAA |
题目名称 |
荒岛野人 |
最终得分 |
100 |
用户昵称 |
胡嘉兴 |
运行时间 |
0.480 s |
代码语言 |
C++ |
内存使用 |
0.31 MiB |
提交时间 |
2017-12-23 10:59:09 |
显示代码纯文本
#include<bits/stdc++.h>
#define N 17
#define MX 1000001
using namespace std;
int n, c[N], p[N], l[N];
int exgcd(int a, int b, int& x, int& y)
{
if(!b)
{
x = 1;
y = 0;
return a;
}
int ret = exgcd(b, a%b, y, x);
y -= x*(a/b);
return ret;
}
inline bool check(int m)
{
int x, y, z;
for(int i = 1; i <= n; i++)
{
for(int j = i+1; j <= n; j++)
{
int dp = p[j]-p[i], dc = c[j]-c[i], dm;
z = exgcd(dp, -1*m, x, y);
if((-1*dc)%z!=0)
{
continue;
}
x *= -1*dc;
x /= z;
y *= -1*dc;
y /= z;
dm = m/z;
if(x<0)
{
int t = (0-x)/dm;
x += dm*(t+1);
if(x<=min(l[i], l[j]))
{
return 0;
}
}
else if(x>=0)
{
x %= dm;
if(x<=min(l[i], l[j]))
{
return 0;
}
}
}
}
return 1;
}
int main()
{
int lower = 0;
freopen("savage.in","r",stdin);
freopen("savage.out","w",stdout);
scanf("%d", &n);
for(int i = 1; i <= n; i++)
{
scanf("%d%d%d", &c[i], &p[i], &l[i]);
lower = max(lower, c[i]);
c[i]--;
}
for(int i = lower; i <= MX; i++)
{
if(check(i))
{
printf("%d\n", i);
break;
}
}
return 0;
}