#include<bits/stdc++.h> usingnamespace std; #define int long long
voidsolve(){ int n, k; cin >> n >> k; vector<int> a(k); for (int i = 0; i < k; i++) { int x, c; cin >> x >> c; x--; a[x] += c; } sort(a.begin(), a.end(), greater()); int ans = 0; for (int i = 0; i < min(n, k); i++) { ans += a[i]; } cout << ans << "\n"; }
signedmain(){ ios::sync_with_stdio(false); cin.tie(0); int t = 1; cin >> t; while (t--) { solve(); } return0; }
#include<bits/stdc++.h> usingnamespace std; #define int long long
voidsolve(){ int n, m; cin >> n >> m; vector<string> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } int ans = 0; for (int d = 0; d < min(n, m) / 2; d++) { string s; for (int j = d; j < m - d - 1; j++) { s += a[d][j]; } for (int i = d; i < n - d - 1; i++) { s += a[i][m - d - 1]; } for (int j = m - d - 1; j > d; j--) { s += a[n - d - 1][j]; } for (int i = n - d - 1; i > d; i--) { s += a[i][d]; } s += s; for (int i = 0; i < s.size() / 2; i++) { if (s.substr(i, 4) == "1543") { ans++; } } } cout << ans << "\n"; } signedmain(){ ios::sync_with_stdio(false); cin.tie(0); int t = 1; cin >> t; while (t--) { solve(); } return0; }
#include<bits/stdc++.h> usingnamespace std; #define int long long
voidsolve(){ int n, k, q; cin >> n >> k >> q; vector<vector<int>> a(k, vector<int>(n)); for (int i = 0; i < n; i++) { for (int j = 0; j < k; j++) { cin >> a[j][i]; } }
for (int j = 0; j < k; j++) { for (int i = 1; i < n; i++) { a[j][i] |= a[j][i - 1]; } } for (int i = 0; i < q; i++) { int m; cin >> m; int lo = 0, hi = n - 1; for (int j = 0; j < m; j++) { int r, c; char o; cin >> r >> o >> c; r--; if (o == '>') { int L = 0, R = n; while (L < R) { int mid = L + (R - L) / 2; if (a[r][mid] > c) { R = mid; } else { L = mid + 1; } } lo = max(lo, L); } else { int L = 0, R = n; while (L < R) { int mid = L + (R - L) / 2; if (a[r][mid] >= c) { R = mid; } else { L = mid + 1; } } hi = min(hi, L - 1); } } if (lo <= hi) { cout << lo + 1 << "\n"; } else { cout << -1 << "\n"; } } }
signedmain(){ ios::sync_with_stdio(false); cin.tie(0); int t = 1; // cin >> t; while (t--) { solve(); } return0; }
首先,异或具有这样的性质:\(0\oplus x = x,
x \oplus x = 0\),因此,求\([l,r]\)之间的答案,我们可以转化为求\([0,l-1]\)和\([0,r]\)之间的答案的异或值。现在我们只考虑求\([0,x]\)之间的答案即可,我们设为\(f(0,x)\),答案即为\(f(l,r) = f(0,l-1) \oplus f(0,r)\)。
#include<bits/stdc++.h> usingnamespace std; #define int long long
voidsolve(){ int l, r, i, k; cin >> l >> r >> i >> k; r++; auto get = [&](int x) { int a = x % 4; if (a == 0) { return0ll; } elseif (a == 1) { return x - 1; } elseif (a == 2) { return1ll; } return x; }; int ans = 0; ans ^= get(r); ans ^= get(l); r = (r - k + (1ll << i) - 1) >> i; l = (l - k + (1ll << i) - 1) >> i; ans ^= get(r) << i; ans ^= get(l) << i; if ((r - l) & 1) { ans ^= k; } cout << ans << "\n"; } signedmain(){ ios::sync_with_stdio(false); cin.tie(0); int t = 1; cin >> t; while (t--) { solve(); } return0; }
#include<bits/stdc++.h> usingnamespace std; #define int long long
voidsolve(){ int n; cin >> n; auto query = [&](int l, int r) { l = max(1ll, l); r = min(n, r - 1); if (l > r) { return0ll; } cout << "xor " << l << " " << r << "\n"; cout.flush(); int x; cin >> x; return x; }; int lo = 0, hi = (1ll << 60), d = 60; vector<int> ans; while (true) { int m = lo + (hi - lo) / 2; int a = query(lo, m); int b = query(m, hi); d--; if (b == 0) { hi = m; } elseif (a == 0) { lo = m; } elseif (b >> d & 1) { ans.push_back(b); hi = m; break; } else { ans.push_back(a); lo = m; break; } } while (true) { int m = lo + (hi - lo) / 2; int a = query(lo, m); int b = query(m, hi); d--; if (b == 0) { hi = m; } elseif (a == 0) { lo = m; } else { ans.push_back(a); ans.push_back(b); hi = m; break; } } sort(ans.begin(), ans.end()); cout << "ans"; for (auto x : ans) { cout << " " << x; } cout << endl; }
signedmain(){ ios::sync_with_stdio(false); cin.tie(0); int t = 1; cin >> t; while (t--) { solve(); } return0; }