博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【bzoj 1407】【Noi2002】Savage
阅读量:5146 次
发布时间:2019-06-13

本文共 1571 字,大约阅读时间需要 5 分钟。

Description

Input

第1行为一个整数N(1<=N<=15),即野人的数目。
第2行到第N+1每行为三个整数Ci, Pi, Li表示每个野人所住的初始洞穴编号,每年走过的洞穴数及寿命值。
(1<=Ci,Pi<=100, 0<=Li<=10^6 )

Output

仅包含一个数M,即最少可能的山洞数。输入数据保证有解,且M不大于10^6。

Sample Input

3
1 3 4
2 7 3
3 2 1

Sample Output

6
//该样例对应于题目描述中的例子。

题解:

  看到这题好久了,一直心虚不敢上= =(其实是自己想多了)。

  一开始以为可以直接算出来,其实也是自己想多了……给了m的范围,n的范围又极其小……然后就是从小到大枚举m,利用扩欧验证是否可行。

 

1 #include 
2 #include
3 using namespace std; 4 const int N=20; 5 int n, m; 6 int c[N],p[N],l[N]; 7 inline int abs(int x){
return (x&-1)?-x:x;} 8 inline int gcd(int a,int b){ 9 return b==0?a:gcd(b,a%b);10 }11 inline void exgcd(int a,int b,int &x,int &y){12 if(b==0) {13 x=1;14 y=0;15 return;16 }17 exgcd(b,a%b,x,y);18 int temp=x;19 x=y;20 y=temp-a/b*y;21 return ;22 }23 inline bool check(int mod){24 for(int i=1;i<=n;i++)25 for(int j=i+1;j<=n;j++){26 int a=p[i]-p[j],b=mod,z=c[j]-c[i];27 int t=gcd(a,b);28 if(z%t) continue;29 int x,y;30 exgcd(a,b,x,y);31 x=x*z/t;32 x%=b/t;33 if(x<0)34 x+=abs(b/t);35 if(x<=l[i]&&x<=l[j]) return false;36 }37 return true;38 }39 int main(){40 scanf("%d", &n);41 int m=0;42 for(int i=1;i<=n;i++)43 scanf("%d%d%d",c+i,p+i,l+i),m=max(m,c[i]);44 for(m;m<=(int)1e6;m++){45 if(check(m)) break;46 }47 printf("%d\n",m);48 }49 /*50 351 1 3 452 2 7 353 3 2 154 */

 

转载于:https://www.cnblogs.com/Troywar/p/7350709.html

你可能感兴趣的文章
运行一个窗体直接最大化并把窗体右上角的最大化最小化置灰
查看>>
Android开发技术周报 Issue#80
查看>>
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
WebForm——IIS服务器、开发方式和简单基础
查看>>
小实验3:实现haproxy的增、删、查
查看>>
Angular中ngModel的$render的详解
查看>>
读《格局》| 未到年纪的真理
查看>>
[转]《城南旧事》里的《送别》
查看>>
07动手动脑
查看>>
django知识点总结
查看>>
C++ STL stack、queue和vector的使用
查看>>
OAuth2 .net MVC实现获取token
查看>>
java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查
查看>>
Nginx多域名配置
查看>>
使用Reporting Services时遇到的小问题
查看>>
传递事件和传递命令系统···
查看>>
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
Database、User、Schema、Tables、Col、Row
查看>>