BZOJ1407: [Noi2002]Savage
2017-04-06 07:58
357 查看
判错后不跳出来无限TLE的zz..
因为数据保证有解且不大于106,所以我们可以枚举(滑稽
考虑对于一个枚举的M,怎么判断他是否合法
对于任意的两个野人,有生之年他们不能在同一个洞穴,设他们到了第x年会在一个洞穴,野人1的速度是a,一开始在b,野人2的速度是c,一开始在d,那么有ax+b≡cx+d(Mod M)
(a−c)x+My=d−b
用拓展欧几里得判是否有解即可,如果有解,再判是否大于了某个野人的寿命
那么枚举M,n个野人两两判是否合法就行了
code:
因为数据保证有解且不大于106,所以我们可以枚举(滑稽
考虑对于一个枚举的M,怎么判断他是否合法
对于任意的两个野人,有生之年他们不能在同一个洞穴,设他们到了第x年会在一个洞穴,野人1的速度是a,一开始在b,野人2的速度是c,一开始在d,那么有ax+b≡cx+d(Mod M)
(a−c)x+My=d−b
用拓展欧几里得判是否有解即可,如果有解,再判是否大于了某个野人的寿命
那么枚举M,n个野人两两判是否合法就行了
code:
#include<set> #include<map> #include<deque> #include<queue> #include<stack> #include<cmath> #include<ctime> #include<bitset> #include<string> #include<vector> #include<cstdio> #include<cstdlib> #include<cstring> #include<climits> #include<complex> #include<iostream> #include<algorithm> #define ll long long using namespace std; const int maxn = 16; int gcd(int a,int b){return a==0?b:gcd(b%a,a);} int exgcd(int a,int b,int &x,int &y) { if(!a) { x=0;y=1; return b; } int tx,ty; int d=exgcd(b%a,a,tx,ty); x=ty-b/a*tx; y=tx; return d; } int n,m; int c[maxn],p[maxn],l[maxn]; bool judge(int x,int y) { int a=p[x]-p[y],b=m,C=c[y]-c[x]; if(!a) return C!=0; a=(a%m+m)%m; int d=gcd(a,b); if(C%d) return true; a/=d; b/=d; C/=d; int tx,ty; exgcd(a,b,tx,ty); tx*=C; tx=(tx%b+b)%b; if(tx>l[x]||tx>l[y]) return true; return false; } int main() { scanf("%d",&n); int d=0; for(int i=1;i<=n;i++) { scanf("%d%d%d",&c[i],&p[i],&l[i]); if(c[i]>d) d=c[i]; } for(m=d;;m++) { bool flag=true; for(int i=1;i<n&&flag;i++)for(int j=i+1;j<=n;j++) if(!judge(i,j)){ flag=false; break; } if(flag) break; } printf("%d\n",m); return 0; }
相关文章推荐
- BZOJ1407: [Noi2002]Savage
- bzoj 1407: [Noi2002]Savage
- bzoj1407【NOI2002】Savage
- 【bzoj 1407】【Noi2002】Savage
- 【扩展欧几里得】Bzoj 1407: [Noi2002]Savage
- [BZOJ1407][NOI2002]Savage(扩欧)
- 【NOI2002】【bzoj1407】Savage
- 【BZOJ】1407 NOI 2002 荒岛野人Savage
- bzoj 1407: [Noi2002]Savage
- bzoj 1407: [Noi2002]Savage【扩展欧几里得+中国剩余定理】
- bzoj1407[Noi2002] Savage
- 【BZOJ1407】 [Noi2002]Savage
- 【BZOJ 1407】 [Noi2002]Savage
- 【bzoj1407】 Noi2002—Savage
- BZOJ1407: [Noi2002]Savage
- BZOJ 1407: [Noi2002]Savage( 数论 )
- BZOJ_1407_[Noi2002]Savage_EXGCD
- [BZOJ 1407][NOI 2002]Savage(中国剩余定理+扩展欧几里得)
- bzoj1407: [Noi2002]Savage
- 【扩展欧几里得】Bzoj 1407: [Noi2002]Savage