bzoj1407(扩欧)
来源:互联网 发布:lol淘宝权在哪里直播 编辑:程序博客网 时间:2024/05/15 11:45
时间复杂度有点玄学。。。
实际上,上面说最少的山洞数小于10^6,实际上就是在提醒枚举山洞的数量,就是枚举模数,判断是否在存活的时间之内会相遇
太暴力了。。。
对于每个m,枚举两个野人,用exgcd求出最早相遇时间,判断是否都在两个野人是存活时间之内,如果都在,return false
注意,如果求出的exgcd无解,也就是方程无解,就代表在这个m下,两个野人根本不可能相遇,continue就可以
好题
#include<cstdio>#include<cmath>#include<cstdlib>#include<algorithm>using namespace std;int n,c[20],p[20],l[20];void exgcd(int a,int b,int &d,int &x,int &y){if (b==0){d=a;x=1;y=0;return ;}exgcd(b,a%b,d,y,x);y-=x*(a/b);}bool judge(int m){for (int i=1;i<=n;i++)for (int j=i+1;j<=n;j++){int x,y,d;int ii=i,jj=j;if (p[ii]<p[jj]) swap(ii,jj);exgcd(p[ii]-p[jj],m,d,x,y);if ((c[jj]-c[ii])%d) continue;//判断是否相遇x=x*(c[jj]-c[ii])/d;int k=m/d;x=((x%k)+k)%k;if (x<=l[i]&&x<=l[j]) return false;//判断是否在活着的时间相遇}return true;}int main(){scanf("%d",&n);int mx=0;for (int i=1;i<=n;i++) scanf("%d%d%d",&c[i],&p[i],&l[i]),mx=max(mx,c[i]);int ans;for (int i=mx;;i++)if (judge(i)){ans=i;break;}printf("%d",ans);return 0;}
0 0
- bzoj1407(扩欧)
- [BZOJ1407][NOI2002]Savage(扩欧)
- bzoj1407
- bzoj1407
- bzoj1407: [Noi2002]Savage
- [BZOJ1407][Noi2002]Savage
- bzoj1407: [Noi2002]Savage
- bzoj1407【NOI2002】Savage
- BZOJ1407: [Noi2002]Savage
- 【BZOJ1407】 [Noi2002]Savage
- bzoj1407: [Noi2002]Savage
- bzoj1407[Noi2002] Savage
- BZOJ1407: [Noi2002]Savage
- BZOJ1407: [Noi2002]Savage
- [bzoj1407][exgcd]Savage
- 【NOI2002】【bzoj1407】Savage
- bzoj1477(扩欧)
- 算法随笔(扩欧)
- 2016-08-23
- 如何注册NetworkInfo
- SDUT OJ 3376 数据结构实验之查找四:二分查找
- HFSS画图中的sweep功能
- 双向队列
- bzoj1407(扩欧)
- 分享到微信微博空间等第三方平台的JS代码
- 关于cocos2d中的世界坐标与局部坐标
- C/C++可变参数宏, 编译期获取宏的可变参数长度
- insert into 的加强版replace into和 insert ignore into
- 在Java代码中控制视图样式是一个相当不合理的选择
- 3.1 mxc_v4l2_capture.c分析---probe函数分析
- ListView和CheckBox的混乱问题
- canvas.drawArc 起始角度