Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
典型的错误代码,我犯了。。。
#include <cstdio> #include <iostream> using namespace std; int main () { int n, cnt; while(scanf("%d", &n) != EOF) { cnt=0; while(n) { if(n&1) { cnt++; } n >>= 1; } printf("%s\n", cnt&1 ? "Kiki":"Cici"); } return 0; }
正确解法:
#include <cstdio> #include <iostream> using namespace std; int base[10]; bool dp[1005]; void Init() { for(int i=0; i<10; i++) { base[i] = 1<<i; } for(int i=1; i<=1000; i++) { dp[i] = 0; for(int j=0; j<10 && base[j]<=i; j++) { if(dp[i-base[j]]==0) { dp[i] = 1; break; } } } } int main () { Init(); int n; while(scanf("%d", &n) != EOF) { printf("%s\n", dp[n]? "Kiki":"Cici"); } return 0; }
当然,通过枚举可以发现规律:
#include<stdio.h> int main() { int n; while(scanf("%d",&n)!=EOF) { if(n%3==0) printf("Cici\n"); else printf("Kiki\n"); } }
HDU 1847 ——Good Luck in CET-4 Everybody!
原文:http://www.cnblogs.com/AcIsFun/p/5372743.html