题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4611

  先求出循环节,然后比较A和B的大小模拟过去。。。

  1. //STATUS:C++_AC_15MS_436KB
  2. #include <functional>
  3. #include <algorithm>
  4. #include <iostream>
  5. //#include <ext/rope>
  6. #include <fstream>
  7. #include <sstream>
  8. #include <iomanip>
  9. #include <numeric>
  10. #include <cstring>
  11. #include <cassert>
  12. #include <cstdio>
  13. #include <string>
  14. #include <vector>
  15. #include <bitset>
  16. #include <queue>
  17. #include <stack>
  18. #include <cmath>
  19. #include <ctime>
  20. #include <list>
  21. #include <set>
  22. #include <map>
  23. #pragma comment(linker,"/STACK:102400000,102400000")
  24. using namespace std;
  25. //using namespace __gnu_cxx;
  26. //define
  27. #define pii pair<int,int>
  28. #define mem(a,b) memset(a,b,sizeof(a))
  29. #define lson l,mid,rt<<1
  30. #define rson mid+1,r,rt<<1|1
  31. #define PI acos(-1.0)
  32. //typedef
  33. typedef __int64 LL;
  34. typedef unsigned __int64 ULL;
  35. //const
  36. const int N=,M=;
  37. const int INF=0x3f3f3f3f;
  38. const int MOD=,STA=;
  39. const LL LNF=1LL<<;
  40. const double EPS=1e-;
  41. const double OO=1e15;
  42. const int dx[]={-,,,};
  43. const int dy[]={,,,-};
  44. const int day[]={,,,,,,,,,,,,};
  45. //Daily Use ...
  46. inline int sign(double x){return (x>EPS)-(x<-EPS);}
  47. template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
  48. template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
  49. template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
  50. template<class T> inline T Min(T a,T b){return a<b?a:b;}
  51. template<class T> inline T Max(T a,T b){return a>b?a:b;}
  52. template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
  53. template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
  54. template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
  55. template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
  56. //End
  57.  
  58. int T;
  59. LL n,A,B,t,late;
  60.  
  61. LL slove(LL upa,LL upb,int flag)
  62. {
  63. int i,j,a,b,la,lb,ok=;
  64. LL ret=;
  65. for(i=a=b=;;){
  66. la=upa-a+;lb=upb-b+;
  67. if(la<lb){
  68. if(ok && i+la>=late){
  69. t=ret+(late-i)*abs(a-b);
  70. ok=;
  71. if(!flag)break;
  72. }
  73. ret+=(LL)la*abs(a-b);
  74. a=;b=(b+la)%B;
  75. }
  76. else{
  77. if(ok && i+lb>=late){
  78. t=ret+(late-i)*abs(a-b);
  79. ok=;
  80. if(!flag)break;
  81. }
  82. ret+=(LL)lb*abs(a-b);
  83. b=;a=(a+lb)%A;
  84. }
  85. i+=Min(la,lb);
  86. if(a==b)break;
  87. }
  88. return ret;
  89. }
  90.  
  91. int main()
  92. {
  93. // freopen("in.txt","r",stdin);
  94. int i,j;
  95. LL ans,cir;
  96. scanf("%d",&T);
  97. while(T--)
  98. {
  99. scanf("%I64d%I64d%I64d",&n,&A,&B);
  100.  
  101. cir=lcm(A,B);
  102. late=n-n/cir*cir;
  103. ans=slove(A-,B-,n/cir)*(n/cir);
  104.  
  105. printf("%I64d\n",ans+t);
  106. }
  107. return ;
  108. }

HDU-4611 Balls Rearrangement 循环节,模拟的更多相关文章

  1. HDU 4611 Balls Rearrangement 数学

    Balls Rearrangement 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4611 Description Bob has N balls ...

  2. HDU 4611 Balls Rearrangement(2013多校2 1001题)

    Balls Rearrangement Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...

  3. hdu 4611 Balls Rearrangement

    http://acm.hdu.edu.cn/showproblem.php?pid=4611 从A中向B中移动和从B中向A中移动的效果是一样的,我们假设从B中向A中移动 而且A>B 我们先求出所 ...

  4. HDU 4611 Balls Rearrangement (数学-思维逻辑题)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4611 题意:给你一个N.A.B,要你求 AC代码: #include <iostream> ...

  5. HDU 4611 - Balls Rearrangement(2013MUTC2-1001)(数学,区间压缩)

    以前好像是在UVa上貌似做过类似的,mod的剩余,今天比赛的时候受baofeng指点,完成了此道题 此题题意:求sum(|i%A-i%B|)(0<i<N-1) A.B的循环节不同时,会有重 ...

  6. hdu 4291 矩阵幂 循环节

    http://acm.hdu.edu.cn/showproblem.php?pid=4291 凡是取模的都有循环节-----常数有,矩阵也有,并且矩阵的更奇妙: g(g(g(n))) mod 109  ...

  7. hdu 4794 FIb求循环节

    很容易看出来这道题是求模n意义下fib数列的最小循环节 对于fib数列的最小循环节的求法,我们可以这样: 1.令n=p1^m1 * p2^m2 * p3^m3…… 2.分别计算fib数列在模p1^m1 ...

  8. Cyclic Nacklace - HDU 3746(next求循环节)

    题目大意:给你一些串,问如果想让这个串里面的循环节至少循环两次,需要添加几个字符(只能在最前面或者最后面添加).比如ababc 需要添加5个就是添加ababc. 分析:其实字符串的长度len-next ...

  9. HDU 6740 kmp最小循环节

    题意:给一个无线循环小数的前几位,给n,m 选择其中一种出现在前几位的循环节方式(a个数),循环节的长度b 使得n*a-m*b最大 样例: 2 1 12.1212 输出 6 选择2,2*1-1*1=1 ...

随机推荐

  1. Spring MVC Checkbox And Checkboxes Example

    In Spring MVC, <form:checkbox /> is used to render a HTML checkbox field, the checkbox values ...

  2. BZOJ 2553 禁忌

    首先我们要考虑给定一个串,如何将他划分,使得他有最多的禁忌串 我们只需要按里面出现的禁忌串们的出现的右端点排序然后贪心就可以啦 我们建出AC自动机,在AC自动机等价于走到一个包含禁忌串的节点就划分出一 ...

  3. VC中支持中文的字符串比较函数

    VS2008开发环境,多字符集和UNICODE字符集都可用. WCHAR * mbcsToUnicode(const char *zStr) { int nByte; WCHAR *zMbcsStr; ...

  4. Git教程之删除文件(8)

    在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txt到Git并且提交:

  5. Python生成器与yield

    列表推导与生成器表达式 当我们创建了一个列表的时候,就创建了一个可以迭代的对象: >>> squares=[n*n for n in range(3)] >>> f ...

  6. Ubuntu 安装Android Studio与使用手册

    用的是Ubuntu 12.04 1.先去下载,国内可以去这里下载 https://github.com/inferjay/AndroidDevTools 2.下载后解压进入android-studio ...

  7. NFC(12)使用Android Beam技术传输文本数据及它是什么

    Android Beam技术是什么 Android Beam的基本理念就是两部(只能是1对1,不可像蓝牙那样1对多)NFC设备靠近时(一般是背靠背),通过触摸一部NFC设备的屏幕,将数据推向另外一部N ...

  8. Ubuntu 12.04下搭建Qt开发环境

    http://download.qt.io/official_releases/qt/ Ubuntu 环境下Gtk与Qt编译环境安装与配置(系统环境是Ubuntu 12.04) 1.配置基础开发环境G ...

  9. [信息OJ 2467] Asakura的难题

     2467: G Asakura的难题 Time Limit:2000MS Memory Limit:65536KB Description Asakura是班里有名的捣蛋鬼,所以经常有同学到老师那里 ...

  10. I.MX6 android BatteryService jni hacking

    /**************************************************************************** * I.MX6 android Batter ...