What Kind of Friends Are You? ZOJ

怎么说呢。。。我能说我又过了一道水题?

emm。。。

问题描述:

给定 n 个待确定名字的 Friends 和 q 个问题。已知 c 个 Friends 的名字。

对于第 i 个问题,有  个 Friends 会回答 yes ,其余  个 Friends 均回答 no 。

现在给定 n 个待确定名字的 Friends 以及他们对于 q 个问题的回答。若能够确定它的名字,给出;否则,输出 Let's Go to the library!!

思路:

对于回答yes的,在当前人结果上加1,而回答no时就把该friend里面的名字之外的名字加1,最后如果某个人的计数为friend的个数,就有可能是这个人,但是如果好几个符合条件的肯定就不能确定了!

#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <cctype>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <bitset>
#define rap(i, a, n) for(int i=a; i<=n; i++)
#define rep(i, a, n) for(int i=a; i<n; i++)
#define lap(i, a, n) for(int i=n; i>=a; i--)
#define lep(i, a, n) for(int i=n; i>a; i--)
#define rd(a) scanf("%d", &a)
#define rlld(a) scanf("%lld", &a)
#define rc(a) scanf("%c", &a)
#define rs(a) scanf("%s", a)
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _  ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = 10010, INF = 0x7fffffff;
map<string, int> mapp;
int tlb[25][210];
int res[maxn];
string str;
string num[maxn];

int main()
{
    int T;
    int n, m, c;
    rd(T);
    while(T--)
    {
        mem(tlb, 0);
        scanf("%d%d%d", &n, &m, &c);
        rap(i, 1, c)
        {
           cin>> num[i];
           mapp[num[i]]  = i;
        }
        rap(i, 1, m)
        {
            int q;
            rd(q);
            rap(j, 1, q)
            {
                cin>> str;
                tlb[i][mapp[str]] = 1;
            }
        }
        int tmp;
        rap(i, 1, n)
        {
            mem(res, 0);
            rap(j, 1, m)
            {
                rd(tmp);
                tmp = tmp?1:-1;
                rap(k, 1, c)
                    if(tlb[j][k])
                        res[k] += tmp;
                if(tmp == -1)
                    rap(k, 1, c)
                        res[k]++;
            }
            int flag = 0, id = 0;
            rap(j, 1, c)
            {
            //    cout<< res[j] <<endl;
                if(res[j] == m && flag)
                {
                    flag++;
                    break;
                }
                if(res[j] == m) flag++, id = j;
            }

            if(flag == 1) cout<< num[id] <<endl;
            else cout<< "Let's go to the library!!" <<endl;

        }

    }

    return 0;
}
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
原文地址:https://www.cnblogs.com/WTSRUVF/p/9519232.html