题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1172
题意:无
解析:刚看到这个题时,比较懵逼,这么多情况,怎么模拟?咱可以这样想,就是所有情况1000-9999,枚举复杂度10^3并不是很大,还可以接受,那咱就枚举每一个四位数,然后判断所有的情况,是否都满足,如果满足,把数存在一个数组里,因为有可能有多个数都满足,就是Not sure,如果最后维护的数组就一个数,那么这个就是答案
代码:
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<vector> #include<queue> #include<map> #include<cmath> #include<string> #define N 1009 using namespace std; const int INF = 0x3f3f3f3f; struct node { int a, b, c; }p[N]; int aa[11], bb[11]; bool check(int a, node b) { memset(aa, 0, sizeof(aa)); memset(bb, 0, sizeof(bb)); int num1 = a, num2 = b.a; while(a) { aa[a]++; a /= 10; } while(b.a) { bb[b.a]++; b.a /= 10; } int f, ff; f = ff = 0; for(int i = 0; i <= 9; i++) { f += min(aa[i], bb[i]); } if(f != b.b) return false; while(num1&&num2) { if(num1 % 10 == num2 % 10) ff++; num1 /= 10; num2 /= 10; } if(ff != b.c) return false; return true; } int main() { int n, i, j; while(scanf("%d", &n), n) { int ans[N]; int cnt = 0; for(i = 1; i <= n; i++) { scanf("%d%d%d", &p[i].a, &p[i].b, &p[i].c); } for(i = 1000; i <= 9999; i++) { for(j = 1; j <= n; j++) { if(!check(i, p[j])) break; } if(j > n) ans[cnt++] = i; } if(cnt == 1) cout << ans[0] << endl; else puts("Not sure"); } return 0; }
