Educational Codeforces Round 100

1|0B. Find The Array


对于条件二来说,1 是万金油的存在,所以我们只需要把奇数位置或偶数位置全部变成 1 即可。因为要求差值小于s2,所以我可以求出奇偶位的和修改较小值即可。

#include <bits/stdc++.h> using namespace std; #define int long long using pii = pair<int, int>; constexpr int inf = 1e9; void solve(){ int n; cin >> n; vector<int> a(n); for( auto &i : a ) cin >> i; int x = 0 , y = 0 , t ; for( int i = 0 ; i < n ; i ++ ){ if( i & 1 ) x += a[i]; else y += a[i]; } t = x <= y; for( int i = 0 ; i < n ; i ++ ){ if( (i&1) == t ) cout << "1 "; else cout << a[i] << " "; } cout << "\n"; return ; } int32_t main() { ios::sync_with_stdio(false), cin.tie(nullptr); int t; for( cin >> t ; t ; t -- ) solve(); return 0; }

2|0C. Busy Robot


模拟即可,要注意满足要求的判定条件。

#include <bits/stdc++.h> using namespace std; #define int long long const int inf = 1e18; void solve() { int n; cin >> n; vector<int> t(n + 2), x(n + 2); for (int i = 1; i <= n; i++) cin >> t[i] >> x[i]; t[n + 1] = inf; int startT = 0, endT = 0, startX = 0, endX = 0, res = 0; for (int i = 1; i <= n; i++) { if (t[i] >= endT) { startX = endX, endX = x[i]; startT = t[i], endT = startT + abs(endX - startX); if (endT <= t[i + 1]) { res++; } } else { int d = (endX - startX) / abs(endX - startX); int lx = startX + d * (t[i] - startT), rx = startX + d * (min( endT , t[i + 1]) - startT); if (lx > rx) swap(lx, rx); if (((x[i] > startX) == (endX > startX)) and lx <= x[i] and x[i] <= rx) { res++; } } } cout << res << "\n"; return; } int32_t main() { ios::sync_with_stdio(false), cin.tie(nullptr); int t; cin >> t; for (; t; t--) solve(); return 0; }

3|0D. Pairs


这道题其实可以贪心的做,只要求出x的最大值和最小值即可。现在的问题是如何求出最值?其实一个比较简单的做法是,直接进行贪心的匹配,优先给较小值匹配一个更大的数,这样就可以知道x的最大值。反过来操作就是最小值。

#include <bits/stdc++.h> using namespace std; #define int long long using pii = pair<int, int>; using vi = vector<int>; #define mp make_pair constexpr int inf = 1e18; void solve() { int n; cin >> n; vi v(2 * n + 1); for (int i = 1, x; i <= n; i++) cin >> x, v[x] = 1; int l = 0, r = n; for (int i = 1, cnt = 0; i <= n * 2; i++) { if (v[i]) { if (cnt) cnt--; else l++; } else cnt++; } for (int i = n * 2, cnt = 0; i >= 1; i--) { if (v[i]) { if (cnt) cnt--; else r--; } else cnt++; } cout << r - l + 1 << "\n"; return; } int32_t main() { ios::sync_with_stdio(false), cin.tie(nullptr); int t; for (cin >> t; t; t--) solve(); return 0; }

__EOF__

本文作者PHarr
本文链接https://www.cnblogs.com/PHarr/p/17705567.html
关于博主:前OIer,SMUer
版权声明CC BY-NC 4.0
声援博主:如果这篇文章对您有帮助,不妨给我点个赞
posted @   PHarr  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示