ZOJ 3960 What Kind of Friends Are You? 【状态标记】

mac2022-06-30  26

题目链接

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3960

题意

首先给出 一系列名字 需要辨别的名字,然后给出Q个问题,每个问题有 若干个人给出答案,给出答案的人 此时状态 为1 没有给出答案 的 状态为0 最后给出 三个需要辨识的状态,如果有且只有一个人 跟这个状态相同 就输出这个人的名字

AC代码

#include <cstdio> #include <cstring> #include <ctype.h> #include <cstdlib> #include <iostream> #include <algorithm> #include <cmath> #include <deque> #include <vector> #include <queue> #include <string> #include <map> #include <stack> #include <set> #include <numeric> #include <sstream> using namespace std; typedef long long LL; const double PI = 3.14159265358979323846264338327; const double E = 2.718281828459; const double eps = 1e-6; const int MAXN = 0x3f3f3f3f; const int MINN = 0xc0c0c0c0; const int maxn = 1e5 + 5; const int MOD = 1e9 + 7; int main() { int t; scanf("%d", &t); while (t--) { int n, q; int i, j; scanf("%d%d", &n, &q); map <string, string> M; M.clear(); string s, temp = ""; for (i = 0; i < q; i++) temp += "0"; int m; scanf("%d", &m); for (i = 0; i < m; i++) { cin >> s; M[s] = temp; } for (i = 0; i < q; i++) { scanf("%d", &m); for (j = 0; j < m; j++) { cin >> s; M[s][i] = '1'; } } // map <string, string>::iterator it; // for (it = M.begin(); it != M.end(); it++) // cout << it -> first << " " << it -> second << endl; string ans; int num; for (i = 0; i < n; i++) { temp.clear(); for (j = 0; j < q; j++) { scanf(" %d", &num); temp += num + '0'; } int flag = 0; ans.clear(); map <string, string>:: iterator it; for (it = M.begin(); it != M.end(); it++) { if (it -> second == temp ) { if (flag == 1) { flag = 0; break; } else { flag = 1; ans = it -> first; } } } if (flag) cout << ans << endl; else printf("Let's go to the library!!\n"); } } }

转载于:https://www.cnblogs.com/Dup4/p/9433271.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)