【BZOJ1263】【SCOI2006】整数划分 高精度+构造
2015-03-24 16:36
344 查看
链接:
#include <stdio.h> int main() { puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/44594117"); }
题解:
一直*3就好了,最后如果剩1,那么把最后一个3变成4,如果剩2,直接乘。代码:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 5010 #define M 100000000 using namespace std; struct HP { int x ,y; void init(){x[0]=1;} void mul(int t) { for(int i=0;i<=y;i++)x[i]*=t; for(int i=0;i<=y;i++) while(x[i]>=M) x[i]-=M,x[i+1]++; if(x[y+1])y++; } void print() { int cnt=y*8,temp=x[y]; while(temp) { temp/=10; cnt++; } printf("%d\n",cnt); if(cnt<=100) { printf("%d",x[y--]); while(y>=0)printf("%08d",x[y--]); } else { cnt=100-cnt+y*8; printf("%d",x[y--]); while(cnt>=8)printf("%08d",x[y--]),cnt-=8; temp=M/10; while(cnt) { printf("%d",(x[y]/temp)%10); temp/=10; cnt--; } } } }ans; int n,m; int main() { int i,j,k; int a,b,c; scanf("%d",&m); ans.init(); while(m>3) { if(m==4) { ans.mul(4); ans.print(); return 0; } ans.mul(3); m-=3; } ans.mul(m); ans.print(); return 0; }
相关文章推荐
- bzoj1263: [SCOI2006]整数划分(高精度+构造)
- [BZOJ1263][SCOI2006]整数划分(数学+高精度)
- BZOJ 1263 [SCOI2006]整数划分 - 高精度乘法
- 【bzoj1263】[SCOI2006]整数划分 高精度
- BZOJ 1263: [SCOI2006]整数划分( 高精度 )
- 【bzoj1263】【scoi2006】【整数划分】【高精度+贪心】
- BZOJ 1263: [SCOI2006]整数划分 数学,高精度
- BZOJ 1263 SCOI2006 整数划分 高精度
- BZOJ 1263 SCOI 2006 整数划分 高精度
- 【SCOI2006】【bzoj1263】整数划分
- bzoj 1263: [SCOI2006]整数划分
- bzoj1263 [SCOI2006]整数划分
- 【SCOI2006】【bzoj1263】整数划分
- BZOJ1263 [SCOI2006]整数划分
- BZOJ1263: [SCOI2006]整数划分
- [BZOJ1263][SCOI2006]整数划分
- BZOJ 1263: [SCOI2006]整数划分
- 1263: [SCOI2006]整数划分
- [SCOI2006]整数划分
- BZOJ1263: [SCOI2006]整数划分