Codeforces Round 892 (Div. 2)
手速慢了,掉分
C. Another Permutation Problem
题意
给定一个正整数
思路
打表可知,答案的排列一定为翻转一部分后缀。暴力枚举要翻转的后缀即可。
代码
void solve() {
int n;
cin >> n;
int ans = 0;
for(int i = 1; i < n; i++) {
ans += i * i;
}
for(int i = 0; i < n; i++) {
int x = 0, y = 0, mx = 0;
for(int j = 1; j <= i; j++) {
x += j * j;
mx = max(mx, j * j);
}
for(int j = n, k = i + 1; j > i; j--, k++) {
y += k * j;
mx = max(mx, k * j);
}
ans = max(ans, x + y - mx);
}
cout << ans << "\n";
}
D. Andrey and Escape from Capygrad
题意
给定一些包含区间,
思路
题意可简化为有若干个区间
先合并重合的区间,再对于每个询问的坐标,二分找到所在的区间。若该坐标不在任何区间,则答案为它自已。
代码
void solve() {
int n;
cin >> n;
vector<array<int, 2>> seg(n);
for(int i = 0; i < n; i++) {
int l, r, a, b;
cin >> l >> r >> a >> b;
seg[i] = {l, b};
}
sort(seg.begin(), seg.end());
vector<array<int, 2>> a;
for(int i = 0; i < n; i++) {
if(!a.empty() && a.back()[1] >= seg[i][0]) {
a.back()[1] = max(a.back()[1], seg[i][1]);
} else {
a.push_back({seg[i][0], seg[i][1]});
}
}
int q;
cin >> q;
while(q--) {
int x;
cin >> x;
int p = lower_bound(a.begin(), a.end(), array{x + 1, 1}) - a.begin() - 1;
if(p >= 0) {
x = max(x, a[p][1]);
}
cout << x << " ";
}
cout << "\n";
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】