#include <iostream>#include <string>using namespace std;const int MAX = 1001;int n, k, p, total = 0;//total:不等式出现的次数,其他为计数的char sign;int t[MAX] = {0};//每次输入的数据,输入一组数据就处理一组int r[MAX] = {0};//确定为真的硬币int w[MAX] = {0};//记录可能为假硬币出现的次数//出现在大于那边的w[i]++,出现在小于那边的w[i]--,假硬币不可能又轻又重int main(){ int i; cin >> n >> k; while (k--) {//输入 cin >> p; for (i = 0; i < 2 * p; i++) { cin >> t[i]; } cin >> sign;//输入<,>,= if (sign == '=') {//标记肯定为真的硬币 for ( i = 0; i < 2 * p; i++) { r[t[i]] = 1; } } else if (sign == '<') { //左轻右重 total++; for ( i = 0; i < p; i++) {//p之前为不等号左边的 w[t[i]]--; } for ( i = p; i < 2 * p; i++) {//p开始为不等号右边的 w[t[i]]++; } } else if (sign == '>') {//左重右轻 total++; for ( i = 0; i < p; i++) {//p之前为不等号左边的 w[t[i]]++; } for (i = p; i < 2 * p; i++) {//p开始为不等号右边的 w[t[i]]--; } } }//end while //假币在不等式中每次都应该出现 int count = 0, pos = 0; for (i = 1; i <= n; i++) { if (r[i]==1) {//真的硬币忽过 continue; } if (w[i] == total || w[i] == 0 - total) {//找每次都出现在不等式一边的"假币",比真重的情况或者比真轻的情况 count++; pos = i; } } if (count != 1) {//假币唯一则输出 cout << 0 << endl; } else { cout << pos << endl; } return 0;}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)