比赛 20110725 评测结果 C
题目名称 失落的神庙 最终得分 0
用户昵称 .Xmz 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-07-25 09:31:58
显示代码纯文本
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cmath>
  4. #include <cstdlib>
  5. #include <cstdio>
  6.  
  7. using namespace std;
  8.  
  9. long long n;
  10.  
  11. struct node
  12. {
  13. long long l,r,v;
  14. }q2[20001],q3[20001],q5[20001],q7[20001],q0[20001];
  15. int s0,t0,s2,s3,s5,s7,t2,t3,t5,t7;
  16. void solve()
  17. {
  18. scanf("%lld",&n);
  19. q2[1].l=q3[1].l=q5[1].l=q7[1].l=2;
  20. q2[1].r=3;q3[1].r=5;q5[1].r=9;q7[1].r=13;
  21. q2[1].v=1;q3[1].v=1;q5[1].v=1;q7[1].v=1;
  22. s0=s2=s3=s5=s7=t2=t3=t5=t7=1;
  23. t0=0;
  24. while (s2<=t2 && s3<=t3 && s5<=t5 && s7<=t7)
  25. {
  26. long long R=min(min(q2[s2].r,q3[s3].r),min(q5[s5].r,q7[s7].r));
  27. long long L=q2[s2].l;
  28. q0[++t0].l=L;q0[t0].r=R;
  29. q0[t0].v=q2[s2].v+q3[s3].v+q5[s5].v+q7[s7].v;
  30. if (L*2<=n)
  31. {
  32. q2[++t2].l=L*2;q2[t2].r=min(R*2+1,n);q2[t2].v=q0[t0].v;
  33. }
  34. if (L*3<=n)
  35. {
  36. q3[++t3].l=L*3;q3[t3].r=min(R*3+2,n);q3[t3].v=q0[t0].v;
  37. }
  38. if (L*5<=n)
  39. {
  40. q5[++t5].l=L*5;q5[t5].r=min(R*5+4,n);q5[t5].v=q0[t0].v;
  41. }
  42. if (L*7<=n)
  43. {
  44. q7[++t7].l=L*7;q7[t7].r=min(R*7+6,n);q7[t7].v=q0[t0].v;
  45. }
  46. q2[s2].l=R+1; if(R+1>q2[s2].r) s2++;
  47. q3[s3].l=R+1; if(R+1>q3[s3].r) s3++;
  48. q5[s5].l=R+1; if(R+1>q5[s5].r) s5++;
  49. q5[s7].l=R+1; if(R+1>q7[s7].r) s7++;
  50. }
  51. printf("%lld\n",q0[t0].v);
  52. }
  53.  
  54. int main()
  55. {
  56. freopen("losttemple.in","r",stdin);
  57. freopen("losttemple.out","w",stdout);
  58. solve();
  59. return 0;
  60. }