AtCoder Beginner Contest 330

1|0A - Counting Passes


#include <bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; #define mp make_pair const int inf = 1e9; i32 main() { int n , l; cin >> n >> l; int res = 0; for( int i = 1 , x ; i <= n ; i ++ ) cin >> x , res += x >= l; cout << res << "\n"; return 0; }

2|0B - Minimize Abs 1


#include <bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; #define mp make_pair const int inf = 1e9; i32 main() { int n, l, r; cin >> n >> l >> r; for (int a, i = 1; i <= n; i++) { cin >> a; if (l <= a and a <= r) cout << a << " "; else if( a > r ) cout << r << " "; else cout << l << " "; } cout << "\n"; return 0; }

3|0C - Minimize Abs 2


预处理所有的平方数,然后枚举加二分

#include <bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; #define mp make_pair const int inf = 1e9, INF = 1e18; i32 main() { int n; cin >> n; vi a; for (int i = 0, x;; i++) { x = i * i, a.push_back(x); if (x > n) break; } int res = INF; for (int y; const auto &x: a) { if (n - x <= 0) res = min(res, x - n); else { y = lower_bound(a.begin(), a.end(), n - x) - a.begin(); res = min(res, abs(x + a[y] - n)); if (y > 1 ) res = min(res, abs(x + a[y - 1] - n)); } } cout << res << "\n"; return 0; }

4|0D - Counting Ls


直接统计每行每列o的数量,然后枚举一下中心点,计算出两边两个的点的选择方式

#include <bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; #define mp make_pair const int inf = 1e9, INF = 1e18; i32 main() { int n; cin >> n; vector<string> g(n); for (auto &i: g) cin >> i; vi cntX(n), cntY(n); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { if (g[i][j] == 'x') continue; cntX[i]++, cntY[j]++; } int res = 0; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { if (g[i][j] == 'o') res += (cntX[i] - 1) * (cntY[j] - 1); } cout << res << "\n"; return 0; }

5|0E - Mex and Update


set维护当前序列中哪些数字没有即可,注意的是所有大于n的数字都可以等效为n

#include <bits/stdc++.h> using namespace std; #define int long long using vi = vector<int>; using i32 = int32_t; using pii = pair<int, int>; #define mp make_pair const int inf = 1e9, INF = 1e18; i32 main() { int n, q; cin >> n >> q; vector<int> cnt(n + 1), a(n); for (auto &i: a) cin >> i, i = min(i, n), cnt[i]++; set<int> mex; for (int i = 0; i <= n; i++) if (cnt[i] == 0) mex.insert(i); for (int i, x; q; q--) { cin >> i >> x, i--, x = min(x, n); cnt[a[i]]--; if (cnt[a[i]] == 0) mex.insert(a[i]); cnt[x]++; if (cnt[x] == 1) mex.erase(x); a[i] = x; cout << *mex.begin() << "\n"; } return 0; }

__EOF__

本文作者PHarr
本文链接https://www.cnblogs.com/PHarr/p/18006807.html
关于博主:前OIer,SMUer
版权声明CC BY-NC 4.0
声援博主:如果这篇文章对您有帮助,不妨给我点个赞
posted @   PHarr  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示