比赛 |
20110725 |
评测结果 |
C |
题目名称 |
失落的神庙 |
最终得分 |
0 |
用户昵称 |
.Xmz |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2011-07-25 09:31:58 |
显示代码纯文本
- #include <iostream>
- #include <cstring>
- #include <cmath>
- #include <cstdlib>
- #include <cstdio>
-
- using namespace std;
-
- long long n;
-
- struct node
- {
- long long l,r,v;
- }q2[20001],q3[20001],q5[20001],q7[20001],q0[20001];
- int s0,t0,s2,s3,s5,s7,t2,t3,t5,t7;
- void solve()
- {
- scanf("%lld",&n);
- q2[1].l=q3[1].l=q5[1].l=q7[1].l=2;
- q2[1].r=3;q3[1].r=5;q5[1].r=9;q7[1].r=13;
- q2[1].v=1;q3[1].v=1;q5[1].v=1;q7[1].v=1;
- s0=s2=s3=s5=s7=t2=t3=t5=t7=1;
- t0=0;
- while (s2<=t2 && s3<=t3 && s5<=t5 && s7<=t7)
- {
- long long R=min(min(q2[s2].r,q3[s3].r),min(q5[s5].r,q7[s7].r));
- long long L=q2[s2].l;
-
- q0[++t0].l=L;q0[t0].r=R;
- q0[t0].v=q2[s2].v+q3[s3].v+q5[s5].v+q7[s7].v;
-
- if (L*2<=n)
- {
- q2[++t2].l=L*2;q2[t2].r=min(R*2+1,n);q2[t2].v=q0[t0].v;
- }
- if (L*3<=n)
- {
- q3[++t3].l=L*3;q3[t3].r=min(R*3+2,n);q3[t3].v=q0[t0].v;
- }
- if (L*5<=n)
- {
- q5[++t5].l=L*5;q5[t5].r=min(R*5+4,n);q5[t5].v=q0[t0].v;
- }
- if (L*7<=n)
- {
- q7[++t7].l=L*7;q7[t7].r=min(R*7+6,n);q7[t7].v=q0[t0].v;
- }
-
- q2[s2].l=R+1; if(R+1>q2[s2].r) s2++;
- q3[s3].l=R+1; if(R+1>q3[s3].r) s3++;
- q5[s5].l=R+1; if(R+1>q5[s5].r) s5++;
- q5[s7].l=R+1; if(R+1>q7[s7].r) s7++;
- }
-
- printf("%lld\n",q0[t0].v);
-
- }
-
- int main()
- {
- freopen("losttemple.in","r",stdin);
- freopen("losttemple.out","w",stdout);
- solve();
- return 0;
- }