AtCoder Beginner Contest 091
A
模拟即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <bits/stdc++.h> using namespace std;int main () { int a,b,c; cin>>a>>b>>c; if (a+b>=c) { cout<<"Yes\n" ; } else { cout<<"No\n" ; } return 0 ; }
B
直接用map
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #include <bits/stdc++.h> using namespace std;using ll = long long ;const int N = 1e6 + 100 ;string t[N]; int main () { int n, m; cin >> n; map<string, int > mp; for (int i = 1 ; i <= n; i++) { cin >> t[i]; mp[t[i]]++; } cin >> m; for (int i = 1 ; i <= m; i++) { string s; cin >> s; mp[s]--; } int ans = 0 ; for (int i = 1 ; i <= n; i++) { ans = max (ans, mp[t[i]]); } cout << ans << '\n' ; return 0 ; }
C
直接建边用匈牙利算法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 #include <bits/stdc++.h> using namespace std;using ll = long long ;using i64 = long long ;using ull = unsigned long long ;using pii = pair<int , int >;const int N = 1e3 + 100 ;pii a[N]; pii b[N]; int Map[N][N];bool vis[2 * N];int p[2 * N];int n;bool match (int i) { for (int j = 1 ; j <= n; ++j) if (Map[i][j] && !vis[j]) { vis[j] = true ; if (p[j] == 0 || match (p[j])) { p[j] = i; return true ; } } return false ; } int Hungarian () { int cnt = 0 ; for (int i = 1 ; i <= n; ++i) { memset (vis, 0 , sizeof (vis)); if (match (i)) cnt++; } return cnt; } int main () { cin >> n; for (int i = 1 ; i <= n; i++) { cin >> a[i].first >> a[i].second; } for (int i = 1 ; i <= n; i++) { cin >> b[i].first >> b[i].second; } for (int i = 1 ; i <= n; i++) { for (int j = 1 ; j <= n; j++) { if (a[i].first < b[j].first && a[i].second < b[j].second) { Map[i][j] = 1 ; } } } int ans = Hungarian (); cout << ans << '\n' ; }
D
本题可以用火车头暴力直接莽夫打法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize("Ofast" ) #pragma GCC optimize("inline" ) #pragma GCC optimize("-fgcse" ) #pragma GCC optimize("-fgcse-lm" ) #pragma GCC optimize("-fipa-sra" ) #pragma GCC optimize("-ftree-pre" ) #pragma GCC optimize("-ftree-vrp" ) #pragma GCC optimize("-fpeephole2" ) #pragma GCC optimize("-ffast-math" ) #pragma GCC optimize("-fsched-spec" ) #pragma GCC optimize("unroll-loops" ) #pragma GCC optimize("-falign-jumps" ) #pragma GCC optimize("-falign-loops" ) #pragma GCC optimize("-falign-labels" ) #pragma GCC optimize("-fdevirtualize" ) #pragma GCC optimize("-fcaller-saves" ) #pragma GCC optimize("-fcrossjumping" ) #pragma GCC optimize("-fthread-jumps" ) #pragma GCC optimize("-funroll-loops" ) #pragma GCC optimize("-freorder-blocks" ) #pragma GCC optimize("-fschedule-insns" ) #pragma GCC optimize("inline-functions" ) #pragma GCC optimize("-ftree-tail-merge" ) #pragma GCC optimize("-fschedule-insns2" ) #pragma GCC optimize("-fstrict-aliasing" ) #pragma GCC optimize("-falign-functions" ) #pragma GCC optimize("-fcse-follow-jumps" ) #pragma GCC optimize("-fsched-interblock" ) #pragma GCC optimize("-fpartial-inlining" ) #pragma GCC optimize("no-stack-protector" ) #pragma GCC optimize("-freorder-functions" ) #pragma GCC optimize("-findirect-inlining" ) #pragma GCC optimize("-fhoist-adjacent-loads" ) #pragma GCC optimize("-frerun-cse-after-loop" ) #pragma GCC optimize("inline-small-functions" ) #pragma GCC optimize("-finline-small-functions" ) #pragma GCC optimize("-ftree-switch-conversion" ) #pragma GCC optimize("-foptimize-sibling-calls" ) #pragma GCC optimize("-fexpensive-optimizations" ) #pragma GCC optimize("inline-functions-called-once" ) #pragma GCC optimize("-fdelete-null-pointer-checks" ) #pragma GCC target("sse,sse2,sse3,sse4,popcnt,abm,mmx,avx,avx2" ) #include <bits/stdc++.h> using namespace std;int n, a[200010 ], b[200010 ], res;signed main () { cin >> n; for (int i = 1 ; i <= n; i++) cin >> a[i]; for (int i = 1 ; i <= n; i++) cin >> b[i]; for (int i = 1 ; i <= n; i++) for (int j = 1 ; j <= n; j++) res ^= a[i] + b[j]; cout << res; }
也可以用考虑数位的方法,考虑第k
位的贡献,为了防止高位的影响,直接取模。
然后就是如果两个数的第k位为1就会在两个数的和有一个范围,这里详见代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize("Ofast" ) #pragma GCC optimize("inline" ) #pragma GCC optimize("-fgcse" ) #pragma GCC optimize("-fgcse-lm" ) #pragma GCC optimize("-fipa-sra" ) #pragma GCC optimize("-ftree-pre" ) #pragma GCC optimize("-ftree-vrp" ) #pragma GCC optimize("-fpeephole2" ) #pragma GCC optimize("-ffast-math" ) #pragma GCC optimize("-fsched-spec" ) #pragma GCC optimize("unroll-loops" ) #pragma GCC optimize("-falign-jumps" ) #pragma GCC optimize("-falign-loops" ) #pragma GCC optimize("-falign-labels" ) #pragma GCC optimize("-fdevirtualize" ) #pragma GCC optimize("-fcaller-saves" ) #pragma GCC optimize("-fcrossjumping" ) #pragma GCC optimize("-fthread-jumps" ) #pragma GCC optimize("-funroll-loops" ) #pragma GCC optimize("-freorder-blocks" ) #pragma GCC optimize("-fschedule-insns" ) #pragma GCC optimize("inline-functions" ) #pragma GCC optimize("-ftree-tail-merge" ) #pragma GCC optimize("-fschedule-insns2" ) #pragma GCC optimize("-fstrict-aliasing" ) #pragma GCC optimize("-falign-functions" ) #pragma GCC optimize("-fcse-follow-jumps" ) #pragma GCC optimize("-fsched-interblock" ) #pragma GCC optimize("-fpartial-inlining" ) #pragma GCC optimize("no-stack-protector" ) #pragma GCC optimize("-freorder-functions" ) #pragma GCC optimize("-findirect-inlining" ) #pragma GCC optimize("-fhoist-adjacent-loads" ) #pragma GCC optimize("-frerun-cse-after-loop" ) #pragma GCC optimize("inline-small-functions" ) #pragma GCC optimize("-finline-small-functions" ) #pragma GCC optimize("-ftree-switch-conversion" ) #pragma GCC optimize("-foptimize-sibling-calls" ) #pragma GCC optimize("-fexpensive-optimizations" ) #pragma GCC optimize("inline-functions-called-once" ) #pragma GCC optimize("-fdelete-null-pointer-checks" ) #pragma GCC target("sse,sse2,sse3,sse4,popcnt,abm,mmx,avx,avx2" ) #include <bits/stdc++.h> using namespace std;const int maxn = 2e5 + 5 ;int n, a[maxn], b[maxn], c[maxn], d[maxn], ans;int main () { cin >> n; for (int i = 1 ; i <= n; i++) cin >> a[i]; for (int i = 1 ; i <= n; i++) cin >> b[i]; for (int k = 0 ; k <= 28 ; k++) { long long cnt = 0 ; for (int i = 1 ; i <= n; i++) c[i] = (a[i] & ((1 << (k + 1 )) - 1 )), d[i] = (b[i] & ((1 << (k + 1 )) - 1 )); sort (c + 1 , c + 1 + n); sort (d + 1 , d + 1 + n); for (int i = 1 ; i <= n; i++) { int l = (1 << k) - c[i], r = 2 * (1 << k) - 1 - c[i]; cnt += upper_bound (d + 1 , d + 1 + n, r) - lower_bound (d + 1 , d + 1 + n, l); l += (1 << (k + 1 )), r += (1 << (k + 1 )); cnt += upper_bound (d + 1 , d + 1 + n, r) - lower_bound (d + 1 , d + 1 + n, l); } if (cnt & 1 ) ans |= (1 << k); } cout << ans; return 0 ; }