hdu 1172

来源:互联网 发布:品茗网络计划2016破解 编辑:程序博客网 时间:2024/05/29 09:40

题目概述

电脑产生一个四位数,人去猜,每次猜电脑会反馈猜对几个数,其中有几个数位置也正确,给出人猜的数和电脑反馈结果,问是否可确定这个数,若可以,求出这个数

时限

10000ms/20000ms

输入

第一行正整数N,其后N行,每行一个4位整数,为人猜的数,一个1位整数,为猜对的个数,一个1位整数,为位置也正确的个数,输入以N=0结束

限制

1<=N<=100

输出

在一行中输出,若可确定,输出这个数,否则输出Not sure

样例输入

6
4815 2 1
5716 1 0
7842 1 0
4901 0 0
8585 3 3
8555 3 2
2
4815 0 0
2999 3 3
0

样例输出

3585
Not sure

讨论

暴搜,额实在没有想到什么更好的方法,实际上作为一个人类额都无法直接根据给出的那6行猜出这个数,于是换个思路,对所有四位数,看看和每次猜的数相比有几位存在,有几位位置相同,如果最后只有一个满足所有条件,便可确定,所幸数据可能水点了,运行时间还是很可观的
不过题目描述有一个坑,从样例第一组第5条可以看到,猜的8585,应该有4位猜对,结果返回3,由此说明答案中的每个数只能被“猜对”一次

题解状态

46MS,1732K,1256 B,C++

题解代码

set<int>avail;//availablestruct state//每次人机对话的结构{    int n, a, b;//猜的数 对的数 位置也正确的数}states[MAXN];bool check(int num, state a)//检查是否满足人机对话条件{    int wa[4] = { num / 1000 , num / 100 % 10 ,num / 10 % 10 , num % 10 }, wb[4] = { a.n / 1000 ,a.n / 100 % 10 , a.n / 10 % 10, a.n % 10 };//wa是暴搜的数的4位 wb是人机对话时猜的数的4位    bool found[4] = {};//为了应对题目的坑 答案中每个数只能被猜对一次    int cnta = 0, cntb = 0;//猜对的个数 位置正确的个数    for (int p = 0; p < 4; p++) {        if (wa[p] == wb[p])            cntb++;//位置正确        for (int i = 0; i < 4; i++) {            if (wa[i] == wb[p] && !found[i]) {//猜对并且不曾被“猜对”过                cnta++;                found[i] = 1;                break;            }        }    }    return cnta == a.a&&cntb == a.b;//两条都完全相同 返回1}void fun(int N){    for (int p = 0; p < N; p++)        scanf("%d%d%d", &states[p].n, &states[p].a, &states[p].b);//input    for (int p = 0; p < 10000; p++) {        bool no = 0;//不符合某次人机对话结果        for (int i = 0; i < N&&!no; i++)            if (!check(p, states[i]))                no = 1;        if (!no)            avail.insert(p);//若都符合 加入可行解中    }    if (avail.size() == 1)        printf("%d\n", *avail.begin());//output//仅有1个可行解 就是他了    else        printf("Not sure\n");//output//否则不确定}int main(void){    //freopen("vs_cin.txt", "r", stdin);    //freopen("vs_cout.txt", "w", stdout);    int N;    while (~scanf("%d", &N) && N) {//input        fun(N);        avail.clear();//注意需要清零    }}

EOF

0 0
原创粉丝点击