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
//该样例对应于题目描述中的例子。

HINT

Source

 
 
正解:搜索+扩展欧几里得
解题报告:
  今天上午考试的T2,一上来一看,这不是板子题吗?然后就没有然后了...
  考虑枚举一共有多少个山洞,每次对于当前的山洞个数,两两check一下,看一下是否会冲突。check的方式很简单,就是直接解他们相遇的不定方程,很容易根据他们的信息得到一个方程,看一下最小正整数解是否在他们的寿命范围内。可以发现这样做的理论复杂度是TLE的,但是很显然我们每次check复杂度远远不到n^2,所以不会T。
 
  1. //It is made by jump~
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <ctime>
  9. #include <vector>
  10. #include <queue>
  11. #include <map>
  12. #include <set>
  13. using namespace std;
  14. typedef long long LL;
  15. const int inf = (<<);
  16. const int MAXN = +;
  17. int n,minl,a,b,c;
  18. int ini[MAXN],p[MAXN],L[MAXN];
  19. //c[i]+p[i]*x=c[j]+p[j]*x-now*y ==> (c[i]-c[j])*x+now*y=c[j]-c[i]
  20.  
  21. inline int getint()
  22. {
  23. int w=,q=; char c=getchar();
  24. while((c<'' || c>'') && c!='-') c=getchar(); if(c=='-') q=,c=getchar();
  25. while (c>='' && c<='') w=w*+c-'', c=getchar(); return q ? -w : w;
  26. }
  27.  
  28. inline int gcd(int x,int y){
  29. if(y==) return x;
  30. return gcd(y,x%y);
  31. }
  32.  
  33. inline void extend_gcd(int a,int b,int &x,int &y){
  34. if(b==) {
  35. x=;
  36. y=;
  37. return ;
  38. }
  39. extend_gcd(b,a%b,x,y);
  40. int lin=x; x=y;
  41. y=lin-(a/b)*y;
  42. }
  43.  
  44. inline void check(int now){//两两检查合法性
  45. int gong,x,y;
  46. for(int i=;i<n;i++)
  47. for(int j=i+;j<=n;j++) {
  48. a=(p[i]-p[j]); b=now; c=(ini[j]-ini[i]); gong=gcd(a,b);
  49. if(c%gong!=) continue; //无解
  50. a=a/gong; b=b/gong; c=c/gong;
  51. extend_gcd(a,b,x,y);
  52. if(b<) b=-b;
  53. x=x*c; x%=b; x+=b; x+=b; x%=b;
  54. if(x<=L[i] && x<=L[j]) return ;
  55. }
  56. printf("%d",now);
  57. exit();
  58. }
  59.  
  60. inline void work(){
  61. n=getint(); for(int i=;i<=n;i++) ini[i]=getint(),p[i]=getint(),L[i]=getint();
  62. for(int i=;i<=n;i++) minl=max(minl,ini[i]);//至少是ini[i]的最大值
  63. for(;;minl++) check(minl);
  64. }
  65.  
  66. int main()
  67. {
  68. work();
  69. return ;
  70. }
 
 

BZOJ1407 [Noi2002]Savage的更多相关文章

  1. BZOJ1407 NOI2002 Savage 【Exgcd】

    BZOJ1407 NOI2002 Savage Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, L ...

  2. BZOJ1407 [Noi2002]Savage 【扩展欧几里得】

    题目链接 BZOJ1407 题解 枚举\(m\)用扩欧判即可 #include<algorithm> #include<iostream> #include<cstrin ...

  3. [BZOJ1407][NOI2002]Savage(扩展欧几里德)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1407 分析: m,n范围都不大,所以可以考虑枚举 先枚举m,然后判定某个m行不行 某个 ...

  4. BZOJ1407: [Noi2002]Savage exgcd

    Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, Li表示每个野人所住的初始洞穴编号,每年走过的洞穴 ...

  5. 【数学 exgcd】bzoj1407: [Noi2002]Savage

    exgcd解不定方程时候$abs()$不能乱加 Description Input 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci, Pi, L ...

  6. bzoj1407 [Noi2002]Savage——扩展欧几里得

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1407 看到一定有解,而且小于10^6,所以可以枚举: 判断一个解是否可行,就两两判断野人 i ...

  7. BZOJ 1407: [Noi2002]Savage( 数论 )

    枚举答案, 然后O(N^2)枚举野人去判他们是否会在有生之年存在同山洞. 具体做法就是: 设第x年相遇, 则 Ci+x*Pi=Cj+x*Pj (mod M), 然后解同余方程. 复杂度应该是O(ans ...

  8. [Noi2002]Savage

    [Noi2002]Savage 数学题. 题解回去写(有个坑点) flag++ #include <cstdio> int n,m,c[25],p[29],l[29]; int exgcd ...

  9. [Noi2002]Savage 题解

    [Noi2002]Savage 时间限制: 5 Sec  内存限制: 64 MB 题目描述 输入 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci ...

随机推荐

  1. Castle ActiveRecord 二级缓存使用 异常记录

    在 本公司的 IBeamMDAA 框架下,如果是配置为本机调试时,AR的查询缓存工作正常,但如果部署到服务器上,工作不正常,二级缓存配置为使用 MemoryCahcheD 服务器,二级缓存没有能够根据 ...

  2. linux numfmt 命令--转换数字

    numfmt SYNOPSIS numfmt [OPTION]... [NUMBER]... DESCRIPTION Reformat NUMBER(s), or the numbers from s ...

  3. web—第三章XHTML

     web—第三章XHTML 又是一周 我们学的了做表单:一开始我以为表单是表格.但结果:表单是以采集和提交用户输入数据的,这样讲很迷,说简单点就是登陆端.比如:Facebook.twitter.Ins ...

  4. caffe的python接口学习(1):生成配置文件

    caffe是C++语言写的,可能很多人不太熟悉,因此想用更简单的脚本语言来实现.caffe提供matlab接口和python接口,这两种语言就非常简单,而且非常容易进行可视化,使得学习更加快速,理解更 ...

  5. Wabpack系列:在webpack+vue开发环境中使用echarts导致编译文件过大怎么办?

    现象,在一个webpack+vue的开发环境中,npm install echarts --save了echarts,然后在vue文件中直接使用 import echarts from 'echart ...

  6. 谱多流形聚类SMMC

    今天是2015年的最后一天,决定尽量乘着这三天休息把毕设主题的博客给更完,今天写smmc的算法,接下来三天会对前面的三个算法kmeans.SC以及smmc应用在今年的研究生建模提供的数据中进行matl ...

  7. eval解析JSON字符串的一个小问题

    之前写过一篇 关于 JSON 的介绍文章,里面谈到了 JSON 的解析.我们都知道,高级浏览器可以用 JSON.parse() API 将一个 JSON 字符串解析成 JSON 数据,稍微欠妥点的做法 ...

  8. <实训|第十一天>学习一下linux中的进程,文件查找,文件压缩与IO重定向

    [root@localhost~]#序言 在今后的工作中,运维工程师每天的例行事务就是使用free -m,top,uptime,df -h...每天都要检查一下服务器,看看是否出现异常.那么今天我们就 ...

  9. 怎样关闭google的自动更新

    谷歌的自动更新很烦人的,只要你点击关于Google Chrome,谷歌就会自动更新成最新版本. 但是sencha框架好像与谷歌29.0以上的兼容性不是很好,所以关闭谷歌自动更新的需求来了,网上很多人说 ...

  10. 在线程中调用SaveFileDialog

    在多线程编程中,有时候可能需要在单独线程中执行某些操作.例如,调用SaveFileDialog类保存文件.首先,我们在Main方法中创建了一个新线程,并将其指向要执行的委托SaveFileAsyn.在 ...