HDOJ --1172

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<fstream>
 6 #include<algorithm>
 7 #define MAXN 105
 8 using namespace std; 
 9 typedef struct{
10     int num[10], a, b;
11     char str[10]; 
12     void Switch(){
13         for(int i = 0; i < 4; i ++)
14             num[i] = str[i]-'0'; 
15     }
16 }Gusse; 
17 Gusse gg[MAXN];
18 int ans[10], target[10], flag, N; 
19 bool Is_In_num(int i){
20     int num1[10], num2[10], cnt = 0; 
21     memset(num1, 0, sizeof(num1)); 
22     memset(num2, 0, sizeof(num2)); 
23     for(int j = 0; j < 4; j ++) num1[ans[j]]++; 
24     for(int j = 0; j < 4; j ++) num2[gg[i].num[j]]++; 
25     for(int j = 0; j < 10;j ++) if(num1[j] && num2[j]) cnt += min(num1[j], num2[j]); 
26     return cnt == gg[i].a; 
27 }
28 bool Is_Ok_num(int i){
29     int cnt = 0; 
30     for(int j = 0; j < 4; j ++)
31         if(ans[j] == gg[i].num[j]) cnt++; 
32     return cnt == gg[i].b; 
33 }
34 bool OK(){
35     for(int i = 0; i < N; i ++)
36         if(!Is_In_num(i) || !Is_Ok_num(i)) return false;
37     return true; 
38 }
39 void dfs(int cnt){
40     if(cnt == 4){
41         if(OK()){
42             flag++; 
43             for(int i = 0; i < 4; i ++) target[i] = ans[i]; 
44         }
45         return ; 
46     }
47     for(int i = 0; i < 10; i ++){
48         if((cnt + i)){
49             ans[cnt] = i; 
50             dfs(cnt+1); 
51         }
52     }
53 }
54 int main(){
55     freopen("in.c", "r", stdin); 
56     while(~scanf("%d", &N) && N){
57         for(int i = 0; i < N; i ++){
58             scanf("%s%d%d", gg[i].str, &gg[i].a, &gg[i].b); 
59             gg[i].Switch(); 
60         }
61         flag = 0; 
62         dfs(0); 
63         if(flag != 1) printf("Not sure\n"); 
64         else{
65             for(int i = 0; i < 3; i ++) printf("%d", target[i]); 
66             printf("%d\n", target[3]); 
67         }
68     }
69     return 0; 
70 }

 

posted on 2014-04-18 15:00  ~Love()  阅读(156)  评论(0编辑  收藏  举报

导航