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

解题报告:问一个“M”型可以把一个矩形的平面最多分割成多少块。

输入是有n个“M",现在已经推出这个公式应该是8 * n^2 - 7 * n + 1,但是这个n的范围达到了10^12次方,只要平方一次就超出long long  的范围了,怎么办呢,用大数?

都试过了,很奇怪,会超时,按照估算的话感觉不会,可能是中间结果比较大吧,这个还在思考,但是10^12平方一次乘以八也只达到了10^25次方级别,所以我们可以用四个__int64来模拟这个结果,这样计算起来就快多了。每一个只存结果的相应的八位,为什么只存八位呢,因为中间要进行平方运算,8位平方以下还好,在long long 的承受范围之内,如果大一点超过long long 就不行了,中间计算的时候相乘就容易溢出,而八位也刚好方便计算。相乘的时候要将大数的对应的位上的long long 两两进行相乘。

还有最后输出结果要注意一点,不能直接输出,中间的数前导0也要输出来,不然看起来就好像少了几个0,反正中间结果用8位的固定格式输出就行了。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<cmath>
  6. #include<cstdlib>
  7. using namespace std;
  8. typedef __int64 INT;
  9. struct Big
  10. {
  11. INT d[];
  12. Big()
  13. {
  14. memset(d,,sizeof(d));
  15. }
  16. void print()
  17. {
  18. int flag = ;
  19. for(int i = ;i >= ;--i)
  20. if(d[i] != && !flag)
  21. {
  22. printf("%I64d",d[i]);
  23. flag = ;
  24. }
  25. else if(flag) printf("%08I64d",d[i]);
  26. puts("");
  27. }
  28. };
  29. Big operator * (Big a,Big b)
  30. {
  31. Big c;
  32. INT flag = ;
  33. for(int i = ;i < ;++i)
  34. for(int j = ;j < ;++j)
  35. {
  36. INT temp = a.d[i] * b.d[j] + flag;
  37. if(temp) c.d[i+j] += temp % ;
  38. flag = temp / ;
  39. }
  40. return c;
  41. }
  42. Big operator - (Big a,Big b)
  43. {
  44. Big c;
  45. for(int i = ;i < ;++i)
  46. {
  47. if(a.d[i] < b.d[i])
  48. {
  49. a.d[i+] -= ;
  50. a.d[i] += ;
  51. }
  52. c.d[i] = a.d[i] - b.d[i];
  53. }
  54. return c;
  55. }
  56. Big operator + (Big a,Big b)
  57. {
  58. Big c;
  59. INT flag = ;
  60. for(int i = ;i < ;++i)
  61. {
  62. INT temp = a.d[i] + b.d[i] + flag;
  63. c.d[i] = temp % ;
  64. flag = temp / ;
  65. }
  66. return c;
  67. }
  68. Big valueof(INT x)
  69. {
  70. int f = ;
  71. Big ans;
  72. while(x)
  73. {
  74. ans.d[f++] = x % ;
  75. x /= ;
  76. }
  77. return ans;
  78. }
  79. int main()
  80. {
  81. int T,kase = ;
  82. INT a;
  83. scanf("%d",&T);
  84. while(T--)
  85. {
  86. scanf("%I64d",&a);
  87. Big ans = valueof(a) * valueof(a);
  88. ans = ans * valueof();
  89. ans = ans - (valueof(a) * valueof());
  90. ans = ans + valueof();
  91. printf("Case #%d: ",kase++);
  92. ans.print();
  93. }
  94. return ;
  95. }

HDU 5047 Sawtooth(大数模拟)上海赛区网赛1006的更多相关文章

  1. 2014 网选 上海赛区 hdu 5047 Sawtooth

    题意:求n个'M'型的折线将一个平面分成的最多的面数! 思路:我们都知道n条直线将一个平面分成的最多平面数是 An = An-1 + n+1 也就是f(n) = (n*n + n +2)/2 对于一个 ...

  2. HDU 5047 Sawtooth(大数优化+递推公式)

    http://acm.hdu.edu.cn/showproblem.php?pid=5047 题目大意: 给n条样子像“m”的折线,求它们能把二维平面分成的面最多是多少. 解题思路: 我们发现直线1条 ...

  3. hdu 4023 2011上海赛区网络赛C 贪心+模拟

    以为是贪心,结果不是,2333 贪心最后对自己绝对有利的情况 点我 #include<cstdio> #include<iostream> #include<algori ...

  4. HDU 5038 Grade北京赛区网赛1005

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5038 解题报告:就是输入n个数w,定义s = 10000 - (100 - w)^2,问s出现频率最高 ...

  5. HDU 5047 Sawtooth 找规律+拆分乘

      Sawtooth Think about a plane: ● One straight line can divide a plane into two regions. ● Two lines ...

  6. hdu 4026 2011上海赛区网络赛F TSP ****

    没看过TSP,先mark //4838039 2011-10-27 23:04:15 Accepted 4026 2343MS 31044K 3143 B C++ Geners //状态压缩DP的TS ...

  7. hdu 4025 2011上海赛区网络赛E 压缩 ***

    直接T了,居然可以这么剪枝 题解链接:点我 #include<cstdio> #include<map> #include<cstring> #define ll ...

  8. hdu 4028 2011上海赛区网络赛H dp+map离散

    一开始用搜索直接超时,看题解会的 #include<iostream> #include<cstdio> #include<map> #include<cst ...

  9. hdu 4027 2011上海赛区网络赛G 线段树 成段平方根 ***

    不能直接使用成段增减的那种,因为一段和的平方根不等于平方根的和,直接记录是否为1,是1就不需要更新了 #include<cstdio> #include<iostream> # ...

随机推荐

  1. Yocto开发笔记之《应用程序架构》(QQ交流群:519230208)

    QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 ======================================================== Eclip ...

  2. js022-高级技巧

    js022-高级技巧 本章内容: 使用高级函数 防篡改对象 Yielding Timers 22.1 高级函数 1.安全的类型检测 2.作用域安全的构造函数 构造函数实际上是一个使用new操作符调用的 ...

  3. matlab连接sql数据库

    最近项目还涉及到matlab连接数据库,下面我就记录如何进行配置使得matlab能够连接sql数据库.由于最近工程做的多一些,所以分享的都在工程配置上,当初为了这些配置可是反复卸载与重装,算法其实也有 ...

  4. CentOS7安装Ambari

    环境: CentOS7安装两个节点:master.slave1.并配置ssh无密码登录. 步骤: 获取 Ambari 的公共库文件(public repository): wget http://pu ...

  5. Webpack 之 Loader 的使用

    安装 loaders 如果loader在npm里,可以这样安装: $ npm install xxx-loader --save 或者 $ npm install xxx-loader --save- ...

  6. CSS3 让图片镜像对称

    1.HTML代码 <!DOCTYPE html> <html> <head> <title>test</title> </head&g ...

  7. yum配置文件详解

    yum是什么: Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包,自动解决包的倚赖性问题,它能便于管理大量系统的更新问题. yum特点:可以同时配置多 ...

  8. Python基础之【第三篇】

    dir(): 默认打印当前模块的所有属性,如果传一个对象参数则打印当前对象的变量名 vars() 默认打印当前模块的所有属性,如果传一个对象参数则打印当前对象的变量名和值 reload() 将以前导入 ...

  9. oracle union 注入工具

    '***********************************************************************************************'ora ...

  10. jQuery 根据城市时区,选择对应的即时时间

    我们的CRM系统中,下面是用jQuery 做了个时区小插件 如图: // 时区城市//$(function(){//所有城市和时间静态输出//var cityID = 170; //中国,北京//va ...