记录编号 |
127720 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[金陵中学2007] 最优分解方案 |
最终得分 |
100 |
用户昵称 |
乌龙猹 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.002 s |
提交时间 |
2014-10-16 07:34:28 |
内存使用 |
0.30 MiB |
显示代码纯文本
- #include<cstdio>
- #include<cstring>
- using namespace std;
- struct dx
- {
- int hs;
- int hw;
- int lk;
- };
- dx fr[1001];
- int n,jl;
- int a[101],b[101],c[201];
- void change(int,int []);
- void cf();
- int main()
- {
- freopen("best.in", "r", stdin);
- freopen("best.out", "w", stdout);
- scanf("%d",&n);
- fr[1].hs=1;fr[1].hw=4;fr[1].lk=1;
- fr[2].hs=5;fr[2].hw=8;fr[2].lk=2;
- int i=3;
- while(1)
- {
- fr[i].hs=fr[i-1].hw+1;
- fr[i].hw=fr[i].hs+i+1;
- fr[i].lk=i;
- if(fr[i].hw>=n)
- {
- jl=i;
- break;
- }
- i++;
- }
- if(n<=8) jl=2;
- if(n==fr[jl].hw)
- {
- a[0]=1;
- a[1]=1;
- for(int i=3;i<=jl+1;i++)
- {
- change(i,b);
- cf();
- }
- change(jl+3,b);
- cf();
- for(int i=a[0];i>=1;i--) printf("%d",a[i]);
- return 0;
- }
- int en=jl+2;
- int bj=en-(n-fr[jl].hs);
- a[0]=1;
- a[1]=1;
- for(int i=2;i<=en;i++)
- {
- if(i==bj) continue;
- change(i,b);
- cf();
- }
- for(int i=a[0];i>=1;i--) printf("%d",a[i]);
- return 0;
- }
- void change(int x,int a[])
- {
- for(int i=0;i<=a[0];i++) a[i]=0;
- while(x)
- {
- a[++a[0]]=x%10;
- x/=10;
- }
- }
- void cf()
- {
- int i,j,x=0;
- for(i=1;i<=a[0];i++)
- {
- x=0;
- for(j=1;j<=b[0];j++)
- {
- c[i+j-1]+=a[i]*b[j]+x;
- x=c[i+j-1]/10;
- c[i+j-1]%=10;
- }
- c[i+b[0]]=x;
- x=0;
- }
- i=a[0]+b[0];
- while((c[i]==0)&&(i>1)) --i;
- c[0]=i;
- memset(a,0,sizeof(a));
- for(int k=i;k>=0;--k) a[k]=c[k];
- memset(c,0,sizeof(c));
- }