博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2014 网选 上海赛区 hdu 5047 Sawtooth
阅读量:5952 次
发布时间:2019-06-19

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

题意:求n个'M'型的折线将一个平面分成的最多的面数!

思路:我们都知道n条直线将一个平面分成的最多平面数是 An = An-1 + n+1
也就是f(n) = (n*n + n +2)/2
对于一个'M'型的折线呢?它有四条线,但是由于三个顶点的关系导致划分的平面
的数目减少了9个!所以有递推公式 f(n) = (m*m + m + 2)/2 - 9*n; m = 4*n
最后 f(n) = (8*n+1)*(n-1)+2)
由于 n<=1e12 , 所以回报 long long!那么对于大于1e9的数我做了大数乘法的处理!

1 #include
2 #include
3 #include
4 using namespace std; 5 6 void fun(int a[], long long b, int &l){
//将一个数进行拆分放到数组中! 7 while(b){ 8 a[l++] = b%10; 9 b/=10;10 }11 }12 13 14 int a[30], b[30], c[30];15 int la, lb;16 17 void cal(){18 memset(c, 0, sizeof(c));19 for(int i=0; i
0) c[len++] = k;30 k = 2;31 for(int i=0; i
0) c[len++] = k;37 38 for(int i = len-1; i>=0; --i)39 printf("%d", c[i]);40 printf("\n");41 }42 43 int main(){44 long long n;45 int t, cnt=0;46 scanf("%d", &t); 47 while(t--){48 scanf("%I64d", &n); 49 printf("Case #%d: ", ++cnt);50 if(n <= 1e9)51 printf("%I64d\n", (8*n+1)*(n-1)+2);52 else{53 long long x = 8*n+1;54 long long y = n-1;55 la=lb=0;56 fun(a, x, la);57 fun(b, y, lb);58 cal();59 }60 } 61 return 0;62 }
本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/3997036.html,如需转载请自行联系原作者
你可能感兴趣的文章
golang xml和json的解析与生成
查看>>
小弟的新书《Ext JS权威指南》终于出版了
查看>>
好吧好吧,就在这里消磨时间
查看>>
二层的,DTP+CAM/ARP
查看>>
2011工作总结
查看>>
javascript 操作DOM元素样式
查看>>
Android 内存管理 &Memory Leak & OOM 分析
查看>>
[转]html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
查看>>
[水]三个数学的小技巧题
查看>>
mysql中查看数据库的版本,什么版本
查看>>
[leetcode-342-Power of Four]
查看>>
MongoDB3.0 创建用户
查看>>
2017-2018-1 20155319 《信息安全系统设计基础》第3周学习总结
查看>>
express 3.0.x 中默认不支持flash() 的解决方法
查看>>
uva-111-dp
查看>>
算法学习1——矩阵转置
查看>>
Tcl与Design Compiler (九)——综合后的形式验证
查看>>
跨页数据传递
查看>>
Linux查看系统负载(CPU和MEM考虑)
查看>>
Codeforces Round #249 (Div. 2) B. Pasha Maximizes
查看>>