HDOJ 1172
2014-04-30 18:38
316 查看
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<fstream> #include<algorithm> #define MAXN 105 using namespace std; typedef struct{ int num[10], a, b; char str[10]; void Switch(){ for(int i = 0; i < 4; i ++) num[i] = str[i]-'0'; } }Gusse; Gusse gg[MAXN]; int ans[10], target[10], flag, N; bool Is_In_num(int i){ int num1[10], num2[10], cnt = 0; memset(num1, 0, sizeof(num1)); memset(num2, 0, sizeof(num2)); for(int j = 0; j < 4; j ++) num1[ans[j]]++; for(int j = 0; j < 4; j ++) num2[gg[i].num[j]]++; for(int j = 0; j < 10;j ++) if(num1[j] && num2[j]) cnt += min(num1[j], num2[j]); return cnt == gg[i].a; } bool Is_Ok_num(int i){ int cnt = 0; for(int j = 0; j < 4; j ++) if(ans[j] == gg[i].num[j]) cnt++; return cnt == gg[i].b; } bool OK(){ for(int i = 0; i < N; i ++) if(!Is_In_num(i) || !Is_Ok_num(i)) return false; return true; } void dfs(int cnt){ if(cnt == 4){ if(OK()){ flag++; for(int i = 0; i < 4; i ++) target[i] = ans[i]; } return ; } for(int i = 0; i < 10; i ++){ if((cnt + i)){ ans[cnt] = i; dfs(cnt+1); } } } int main(){ freopen("in.c", "r", stdin); while(~scanf("%d", &N) && N){ for(int i = 0; i < N; i ++){ scanf("%s%d%d", gg[i].str, &gg[i].a, &gg[i].b); gg[i].Switch(); } flag = 0; dfs(0); if(flag != 1) printf("Not sure\n"); else{ for(int i = 0; i < 3; i ++) printf("%d", target[i]); printf("%d\n", target[3]); } } return 0; }