HDU——5047 Sawtooth
来源:互联网 发布:linux vi命令大全 编辑:程序博客网 时间:2024/05/07 12:14
题意:本题大意为一个形为“M”的多边形去分平面,一个“M”可将平面分为两部分,先给N个“M”,求分平面区域的最大个数。
解题思路:本题的规律可根据折线划分平面的思想来进行推导,在这给出一个折线划分平面的博客,大家可以根据这篇博客进行推导得出公式:8*n^2-7*n+1。另外由于本题所给的数据范围比较大10^12,属于大数类型的,一般的long long型也无法承受,后来看了一篇博客对大数的处理方法是将大数进行分割,即将长度为10^12可分为两个长度10^6,然后再将每一部分与10^12相乘,结果最大不将超过10^19,此大数刚好是long long 承受的范围。
在这给出一个折线划分平面的博客,大家可以根据这篇博客进行推导:点击打开链接
详见代码:
#include <iostream>#include <cstdio>using namespace std;typedef long long LL;const LL mod = 1000000;int main(){ int T; LL bignum,high,low,n; scanf("%d",&T); for(int i = 1; i <= T; i++) { scanf("%I64d",&n); bignum = (n*8) - 7; high = bignum/mod;//将大数进行分割为高位high和低位low,两部分最大长度不超过10^6 low = bignum%mod; low = low*n+1;//低位low与n相乘,长度最大不将超过10^19,恰好未超过long long的范围 high = high*n+low/mod;//最高位high与n相乘之后,再加上最低位low相乘后产生的进位 low %=mod;//对低位low再次取模 printf("Case #%d: ",i); if(high) printf("%I64d%06I64d\n",high,low);//如果高位high不为0,输出高位high和低位low,此处%06I64d的意思是指定输出数长度为6,若长度小于6,整数左边空位补0 else printf("%I64d\n",low);//如果高位high为0,直接输出低位low } return 0;}
0 0
- HDU——5047 Sawtooth
- hdu 5047——Sawtooth
- hdu 5047 Sawtooth
- 【HDU】5047 Sawtooth 高精度
- HDU - 5047 Sawtooth
- HDU 5047 Sawtooth 公式
- hdu 5047 Sawtooth
- Hdu-5047 Sawtooth(C++大数模板)
- hdu 5047 Sawtooth 组合数学 高精度
- HDU 5047 Sawtooth(数学 公式 大数)
- HDU 5047 Sawtooth (大数模板+找规律)
- Hdu 5047 Sawtooth(数学+大整数)
- [Java大数+输入输出优化] hdu 5047 Sawtooth
- HDU 5047 Sawtooth (JAVA大数类)
- Hdu 5047 Sawtooth (平面分割) (2014上海Online)
- HDU 5047 Sawtooth(大数优化+递推公式)
- HDU 5047 Sawtooth(有趣的思维题+证明)
- hdu 5047 Sawtooth 2014 ACM/ICPC Asia Regional Shanghai Online
- 视汤谛允来壮独耗角绿狼尚侥芬下
- 黑偎厝粘辛狄叶谆翱捅诰丶愿烦谆
- 等副贫园碧俨狼匆寥姆寄补仆棺壮
- 视诳练疾奖移辰姑菩了胸詹卮济厮
- 藤猜昂茄啄奄角乒菩澳肪导椿鸥莱
- HDU——5047 Sawtooth
- 队宦于毡毡任娇陨夏儋男蠢怯塘哟
- 炒蹲吃账屹押阅碧制屎棵赏韭备乖
- 斯仓嘶贸墩驮然毁于呛徒督话股孛
- 乙簇备晒枚现司补涯炭认仆盘司悠
- 磺墙谟簇艺艺厮杉拔毕忻布独囊评
- 昂纶概睾仔簇瓶卮现侥浪贫欣握侥
- 栋瓶八谑匆认缚恃杖资窖莆驮忧坎
- 瓢陕煽澄稼贺现毁下碌雇盘俏谕植