30pts求调
查看原帖
30pts求调
1788579
SqrT_Pow楼主2025/7/28 13:34

rt,只有7,8,10AC

#include <bits/stdc++.h>
using namespace std;
struct NO_16 {
	int NO_52;
	string NO_7;
	NO_16(int t, string n) : NO_52(t), NO_7(n) {}
};
string NO_74[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
int main() {
	int M, N, NO_15;
	cin >> M >> N >> NO_15;
	vector<string> NO_11(M);
	set<string> NO_10;
	map<string, vector<NO_16>> NO_34;
	for (int i = 0; i < M; i++) {
		cin >> NO_11[i];
		NO_10.insert(NO_11[i]);
	}
	cin.ignore();
	for (int i = 0; i < NO_15; i++) {
		string NO_53;
		getline(cin, NO_53);
		size_t NO_84 = NO_53.find(':');
		if (NO_84 == string::npos) {
			continue;
		}
		string NO_38 = NO_53.substr(0, NO_84);
		string NO_27 = (NO_84 + 2 <= NO_53.size()) ? NO_53.substr(NO_84 + 2) : "";
		if (NO_27 == "I am guilty.") {
			NO_34[NO_38].push_back(NO_16(1, ""));
		} else if (NO_27 == "I am not guilty.") {
			NO_34[NO_38].push_back(NO_16(2, ""));
		} else {
			size_t NO_92 = NO_27.find(" is guilty.");
			if (NO_92 != string::npos && NO_92 + 11 == NO_27.size()) {
				string NO_89 = NO_27.substr(0, NO_92);
				NO_34[NO_38].push_back(NO_16(3, NO_89));
			} else {
				size_t NO_102 = NO_27.find(" is not guilty.");
				if (NO_102 != string::npos && NO_102 + 15 == NO_27.size()) {
					string NO_89 = NO_27.substr(0, NO_102);
					NO_34[NO_38].push_back(NO_16(4, NO_89));
				} else if (NO_27.size() >= 9 && NO_27.substr(0, 9) == "Today is ") {
					if (NO_27.back() == '.') {
						string NO_66 = NO_27.substr(9, NO_27.size() - 10);
						bool NO_9 = false;
						for (int j = 0; j < 7; j++) {
							if (NO_66 == NO_74[j]) {
								NO_9 = true;
								break;
							}
						}
						if (NO_9) {
							NO_34[NO_38].push_back(NO_16(5, NO_66));
						}
					}
				}
			}
		}
	}
	set<string> NO_20;
	for (int idx = 0; idx < M; idx++) {
		string x = NO_11[idx];
		bool NO_8 = false;
		for (int d = 0; d < 7; d++) {
			int NO_90 = 0;
			int NO_71 = 0;
			int NO_19 = 0;
			bool NO_23 = true;
			for (int i = 0; i < M; i++) {
				string s = NO_11[i];
				if (NO_34.find(s) == NO_34.end() || NO_34[s].empty()) {
					NO_19++;
					continue;
				}
				vector<NO_16>& NO_14 = NO_34[s];
				bool NO_85 = true;
				bool NO_13 = true;
				for (NO_16& st : NO_14) {
					bool NO_73;
					if (st.NO_52 == 1) {
						NO_73 = (s == x);
					} else if (st.NO_52 == 2) {
						NO_73 = (s != x);
					} else if (st.NO_52 == 3) {
						if (NO_10.find(st.NO_7) == NO_10.end()) {
							NO_73 = false;
						} else {
							NO_73 = (st.NO_7 == x);
						}
					} else if (st.NO_52 == 4) {
						if (NO_10.find(st.NO_7) == NO_10.end()) {
							NO_73 = true;
						} else {
							NO_73 = (st.NO_7 != x);
						}
					} else if (st.NO_52 == 5) {
						NO_73 = (st.NO_7 == NO_74[d]);
					} else {
						continue;
					}
					if (NO_73) {
						NO_13 = false;
					} else {
						NO_85 = false;
					}
				}
				if (NO_85 && NO_13) {
					NO_19++;
				} else if (NO_85) {
					NO_90++;
				} else if (NO_13) {
					NO_71++;
				} else {
					NO_23 = false;
					break;
				}
			}
			if (!NO_23) {
				continue;
			}
			if (NO_71 <= N && N <= NO_71 + NO_19) {
				NO_8 = true;
				break;
			}
		}
		if (NO_8) {
			NO_20.insert(x);
		}
	}
	if (NO_20.empty()) {
		cout << "Impossible" << endl;
	} else if (NO_20.size() == 1) {
		cout << *NO_20.begin() << endl;
	} else {
		cout << "Cannot Determine" << endl;
	}
	return 0;
}
2025/7/28 13:34
加载中...