• 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
    "); 
    64         else{
    65             for(int i = 0; i < 3; i ++) printf("%d", target[i]); 
    66             printf("%d
    ", target[3]); 
    67         }
    68     }
    69     return 0; 
    70 }
  • 相关阅读:
    谈谈vertical-align的text-bottom和text-top
    【golang】代码学习
    【golang】json相关:unmarshal
    【tidb】相关的调研
    【php】sort函数整理
    【hive学习笔记1】-开始
    python2和python3区别
    python: 类型转换(int,long,float->string)
    【java】查找应用程序的资源
    【java】已经学习的部分
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3673275.html
Copyright © 2020-2023  润新知