T1(博弈论)
cpp
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
int n, m, t;
void solve() {
cin >> n >> m; t = n + m - 2;
if(t & 1) cout << "Yes" << endl;
else cout << "No" << endl;
}
int main() {
cin.tie(0); cout.tie(0);
std::ios::sync_with_stdio(false);
int T = 1;
cin >> T;
while(T --) {
solve();
}
return 0;
}
T2(思维,模拟,哈希表,位运算)
cpp
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
int n, m;
int a[N];
int xor_in = 0, XOR_M;
unordered_map<int, int> mp;
unordered_map<int, int> in, out;
bool check() {
if(in.size() == m && xor_in == XOR_M) {
cout << "YES" << endl;
cout << 0 << endl;
return true;
}
if(in.size() == m - 1 && out.size() == 1) {
int target = XOR_M ^ xor_in;
int idx = mp[target];
if(idx != 0) {
cout << "YES" << endl;
cout << 1 << endl;
cout << (out.begin())->second << ' ' << idx << endl;
return true;
}
}
return false;
}
void solve() {
cin >> n >> m;
for(int i = 1; i <= n; i ++) cin >> a[i];
for(int i = 1; i <= m; i ++) XOR_M ^= i;
for(int i = 1; i <= m; i ++) {
if(a[i] > m) out[a[i]] = i;
else in[a[i]] = i, xor_in ^= a[i];
}
for(int i = m + 1; i <= n; i ++) mp[a[i]] = i;
if(check()) return ;
for(int i = 1, j = m + 1; j <= n; i ++, j ++) {
if(a[i] >= 1 && a[i] <= m) {
in.erase(a[i]);
xor_in ^= a[i];
} else out.erase(a[i]);
if(a[j] >= 1 && a[j] <= m) in[a[j]] = j, xor_in ^= a[j];
else out[a[j]] = j;
mp.erase(a[j]);
mp[a[i]] = i;
if(check()) return ;
}
cout << "NO" << endl;
}
int main() {
cin.tie(0); cout.tie(0);
std::ios::sync_with_stdio(false);
int T = 1;
// cin >> T;
while(T --) {
solve();
}
return 0;
}
T3(模拟,哈希表)
cpp
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
unordered_map<string, unordered_map<string, unordered_set<string>>> fun; // name : args : type
string get_type(string op) {
string ret;
for(char c : op) {
if(c == ' ') break;
ret += c;
}
return ret;
}
string get_name(string op) {
string ret;
int idx = op.find('('); idx -- ;
for(; idx >= 0; idx --) {
if(op[idx] == ' ') break;
ret += op[idx];
}
reverse(ret.begin(), ret.end());
return ret;
}
string get_args(string op) {
int a = op.find('('), b = op.find(')');
op = op.substr(a + 1, b - a - 1); op += ',';
vector<string> ss; string t;
for(char c : op) {
if(c == ',') ss.push_back(t), t = "";
else t += c;
}
string ret;
for(string s : ss) {
if(s.find(' ') != -1) ret += s.substr(0, s.find(' ')) + ",";
else ret += s + ",";
}
return ret;
}
void solve() {
int T, code;
cin >> T;
string op;
while(T --) {
cin >> code;
getline(cin, op);
getline(cin, op);
if(code == 1) {
string type = get_type(op);
string name = get_name(op);
string args = get_args(op);
if(fun.count(name) == 0) {
fun[name][args].insert(type);
cout << "ok." << endl;
} else {
if(fun[name].count(args) == 0) {
fun[name][args].insert(type);
cout << "ok." << endl;
} else {
cout << "method " << name << " is already defined." << endl;
}
}
} else if(code == 2) {
string type = get_type(op);
string name = get_name(op);
string args = get_args(op);
if(fun.count(name) != 0 && fun[name].count(args) != 0) cout << "ok." << endl;
else if(fun.count(name) == 0) cout << "cannot find symbol " << name << "." << endl;
else if(fun.count(name) != 0 && fun[name].count(args) == 0) {
cout << "method " << name << " cannot be applied to given types." << endl;
}
}
}
}
int main() {
cin.tie(0); cout.tie(0);
std::ios::sync_with_stdio(false);
solve();
return 0;
}