搞了好久

#include<iostream>
#include<cstring>
using namespace std;
#define MAXN 1000
#define MAXK 100
int a[MAXK + 1][MAXN + 1];//a[i][]记录第i次称量的结果
char op[MAXK + 1];//记录第i次的天平倾斜情况
bool coin[MAXN + 1];//true为真硬币,false表示可能为假硬币
int N, K;
//假设i号硬币是假币,假设假币更轻
//如果能通过假币测验,返回true,否则返回false
bool is_false_coin1(int i) {
	//cout << "---------------" << endl;
	for (int k = 1; k <= K; k++) {//K次结果
		bool flag = false;//没有假币出现
		for (int j = 1; j<=2*a[k][0]; j++) {
			if (a[k][j] == i) {//本次结果中包含假币
				flag = true;
				if ((j <= a[k][0])&(op[k] != '>'))return false;
				if ((j > a[k][0])&(op[k] != '<'))return false;
			}
		}
	
		if(!flag) {
			if (op[k] != '=')return false;
		}
	}
	return true;
}
//假设假币更重
bool is_false_coin2(int i) {
	for (int k = 1; k <= K; k++) {//K次结果
		bool flag = false;//没有假币出现
		for (int j = 1; j <= 2 * a[k][0]; j++) {
			if (a[k][j] == i) {//本次结果中包含假币
				flag = true;
				if ((j <= a[k][0])&(op[k] != '<'))return false;
				if ((j > a[k][0])&(op[k] != '>'))return false;
			}
		}

		if (!flag) {
			if (op[k] != '=')return false;
		}
	}
	return true;
}
int main() {
	memset(coin, false, sizeof(coin));
	memset(a, 0, sizeof(a));
	 cin >> N >> K;
	for (int k = 1; k <= K; k++) {//用于控制k次称量结果的记录
		int num; cin >> num;
		a[k][0] = num;
		for (int i = 1; i <= 2 * num; i++) {
			cin >> a[k][i];//a[i][]记录第i次称量的结果
		}
		cin >> op[k];
	}
	//通过称量结果分析硬币真假
	for (int i = 1; i <= N; i++) {
		if (is_false_coin1(i)|| is_false_coin2(i)) {//假如i号硬币可以通过假币测验

		}
		else {//不能同过假币测验,那么一定是真币
			coin[i] = true;
		}
	}

	int coin_false = 0;
	int id;
	for (int i = 1; i <= N; i++) {
		if (!coin[i]) {
			coin_false++;
			id = i;
		}
	}
	if (coin_false == 1) {
		cout << id << endl;
	}
	else {
		cout << 0 << endl;
	}

	return 0;
}