bzoj 1408: [Noi2002]Robot (DP+欧拉函数)
2017-03-02 17:49
302 查看
1408: [Noi2002]Robot
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 559 Solved: 375
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
32 1
3 2
5 1
Sample Output
86
75
HINT
90号机器人有10个老师,加上它自己共11个。其中政客只有15号;军人有3号和5号;学者有8个,它们的编号分别是:2,6,9,10,18,30,45,90。Source
[Submit][Status][Discuss]
题解:DP+欧拉函数
这里的独立数其实就和phi。
欧拉函数phi是积性函数,那么如果i,j互质,那么phi(i*j)=phi(i)*phi(j)
那么我们用f[i][j]表示选到第i个数一共选了j个数的phi的和。
f[i][j]=f[i-1][j]+f[i-1][j-1]*(p[i]-1)
这样子可以分开计算奇偶,得到政客和军人,然后用总数-政客-军人得到学者。
那么总数就是sigma(d|n) phi(d)=n
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #define N 1003 #define mod 10000 using namespace std; int p ,n,m,f ; int quickpow(int num,int x) { int ans=1; int base=num%mod; while (x) { if (x&1) ans=base*ans%mod; x>>=1; base=base*base%mod; } return ans; } int main() { freopen("a.in","r",stdin); scanf("%d",&n); m=1; int cnt=0; bool pd=true; for (int i=1;i<=n;i++) { cnt++; scanf("%d",&p[cnt]); int x; scanf("%d",&x); m=m*quickpow(p[cnt],x)%mod; if (x!=1) pd=false; if (p[cnt]==2) cnt--; } m--; //cout<<m<<endl; //cout<<cnt<<endl; for (int i=1;i<=cnt;i++) f[i][1]=(f[i-1][1]+p[i]-1)%mod; for (int i=2;i<=cnt;i++) for (int j=2;j<=i;j++) { f[i][j]=(f[i-1][j]+f[i-1][j-1]*(p[i]-1)%mod)%mod; } int ans1=0,ans2=0; for (int i=2;i<=cnt;i+=2) ans1+=f[cnt][i],ans1%=mod; for (int i=1;i<=cnt;i+=2) ans2+=f[cnt][i],ans2%=mod; printf("%d\n%d\n",ans1,ans2); printf("%d\n",(m-ans1-ans2+mod+mod)%mod); }
相关文章推荐
- bzoj 1408 [Noi2002]Robot(欧拉函数)
- BZOJ 1408: [Noi2002]Robot
- bzoj 1408: [Noi2002]Robot(数论+DP)
- bzoj1408: [Noi2002]Robot
- [BZOJ1408][Noi2002]Robot(数论+dp)
- BZOJ_1408_[Noi2002]Robot_数学
- 【BZOJ 1408】【NOI 2002】Robot
- BZOJ 1408 NOI2002 Robot 数论
- 1408: [Noi2002]Robot 欧拉函数+快速幂
- BZOJ 1408: [Noi2002]Robot
- 1408: [Noi2002]Robot|快速幂|欧拉函数
- 【bzoj1408】 Noi2002—Robot
- 【BZOJ1408】[Noi2002]Robot DP+数学
- [Noi2002]Robot 欧拉函数+递推
- 【bzoj1408】[Noi2002]Robot 数论+dp
- 【bzoj1407】 Noi2002—Savage
- BZOJ1407: [Noi2002]Savage
- 【NOI2002】【bzoj1407】Savage
- bzoj1407【NOI2002】Savage
- 【BZOJ】2005: [Noi2010]能量采集(欧拉函数+分块)