记录编号 127720 评测结果 AAAAAAAAAA
题目名称 [金陵中学2007] 最优分解方案 最终得分 100
用户昵称 Gravatar乌龙猹 是否通过 通过
代码语言 C++ 运行时间 0.002 s
提交时间 2014-10-16 07:34:28 内存使用 0.30 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<cstring>
  3. using namespace std;
  4. struct dx
  5. {
  6. int hs;
  7. int hw;
  8. int lk;
  9. };
  10. dx fr[1001];
  11. int n,jl;
  12. int a[101],b[101],c[201];
  13. void change(int,int []);
  14. void cf();
  15. int main()
  16. {
  17. freopen("best.in", "r", stdin);
  18. freopen("best.out", "w", stdout);
  19. scanf("%d",&n);
  20. fr[1].hs=1;fr[1].hw=4;fr[1].lk=1;
  21. fr[2].hs=5;fr[2].hw=8;fr[2].lk=2;
  22. int i=3;
  23. while(1)
  24. {
  25. fr[i].hs=fr[i-1].hw+1;
  26. fr[i].hw=fr[i].hs+i+1;
  27. fr[i].lk=i;
  28. if(fr[i].hw>=n)
  29. {
  30. jl=i;
  31. break;
  32. }
  33. i++;
  34. }
  35. if(n<=8) jl=2;
  36. if(n==fr[jl].hw)
  37. {
  38. a[0]=1;
  39. a[1]=1;
  40. for(int i=3;i<=jl+1;i++)
  41. {
  42. change(i,b);
  43. cf();
  44. }
  45. change(jl+3,b);
  46. cf();
  47. for(int i=a[0];i>=1;i--) printf("%d",a[i]);
  48. return 0;
  49. }
  50. int en=jl+2;
  51. int bj=en-(n-fr[jl].hs);
  52. a[0]=1;
  53. a[1]=1;
  54. for(int i=2;i<=en;i++)
  55. {
  56. if(i==bj) continue;
  57. change(i,b);
  58. cf();
  59. }
  60. for(int i=a[0];i>=1;i--) printf("%d",a[i]);
  61. return 0;
  62. }
  63. void change(int x,int a[])
  64. {
  65. for(int i=0;i<=a[0];i++) a[i]=0;
  66. while(x)
  67. {
  68. a[++a[0]]=x%10;
  69. x/=10;
  70. }
  71. }
  72. void cf()
  73. {
  74. int i,j,x=0;
  75. for(i=1;i<=a[0];i++)
  76. {
  77. x=0;
  78. for(j=1;j<=b[0];j++)
  79. {
  80. c[i+j-1]+=a[i]*b[j]+x;
  81. x=c[i+j-1]/10;
  82. c[i+j-1]%=10;
  83. }
  84. c[i+b[0]]=x;
  85. x=0;
  86. }
  87. i=a[0]+b[0];
  88. while((c[i]==0)&&(i>1)) --i;
  89. c[0]=i;
  90. memset(a,0,sizeof(a));
  91. for(int k=i;k>=0;--k) a[k]=c[k];
  92. memset(c,0,sizeof(c));
  93. }