HDU 1172 猜数字 水题

来源:互联网 发布:我国网络零售的特点 编辑:程序博客网 时间:2024/06/06 08:42

思路:枚举1000到9999,按照题目模拟

http://acm.hdu.edu.cn/showproblem.php?pid=1172

/*********************************************    Problem : HDU 1172    Author  : NMfloat    InkTime (c) NM . All Rights Reserved .********************************************/#include <map>#include <set>#include <queue>#include <cmath>#include <ctime>#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>#define rep(i,a,b)  for(int i = a ; i <= b ; i ++)#define rrep(i,a,b) for(int i = b ; i >= a ; i --)#define repE(p,u) for(Edge * p = G[u].first ; p ; p = p -> next)#define cls(a,x)   memset(a,x,sizeof(a))#define eps 1e-8using namespace std;const int MOD = 1e9+7;const int INF = 0x3f3f3f3f;const int MAXN = 1e5;const int MAXE = 2e5;typedef long long LL;typedef unsigned long long ULL;int T,n,m,k;int num[105],corr[105],loct[105];int num_d[105][5];int num_vis[105][11];void get_d(int * p,int value) {    rep(i,1,4){        p[i] = value % 10;        value /= 10;    }}void input() {    rep(i,1,n) scanf("%d %d %d",&num[i],&corr[i],&loct[i]) ;}void solve() {    int cnt = 0;    int t1[5],t2[5];    cls(num_vis,0);    rep(i,1,n) {        get_d(t2,num[i]);        rep(j,1,4) num_d[i][j] = t2[j] ,num_vis[i][t2[j]] ++;    }    int vis[11];    int pos ;    rep(i,1000,9999) {        cls(vis,0);        get_d(t1,i);        rep(j,1,4) vis[t1[j]] ++;        int corrs = 0 , locts = 0 , ok = 0;        //if(i == 3585) printf("%d %d %d %d\n",t1[1],t1[2],t1[3],t1[4]);        rep(j,1,n) {            corrs = 0 ; locts = 0 ;            rep(ia,1,4) if(t1[ia] == num_d[j][ia]) locts ++;            rep(ia,0,9) corrs += min(num_vis[j][ia],vis[ia]);            if(corrs != corr[j] || locts != loct[j]) {                //if(i == 3585) printf("Hello : %d %d %d\n",num[j],corrs,locts);                ok = 1 ; break ;            }        }        if(!ok) cnt ++ , pos = i ;//,printf("%d ",pos);    }    if(cnt == 1) printf("%d\n",pos);    else puts("Not sure");}int main(void) {    //freopen("a.in","r",stdin);    //scanf("%d",&T);    //while(T--) {    while(scanf("%d",&n),n) {        input();        solve();    }    return 0;}
0 0