Educational Codeforces Round 163 (Rated for Div. 2) 补题记录(A~D)
1.CodeForces Round #939(Div. 2) 补题记录(A~F)2.CodeTON Round 8 (Div. 1 + Div. 2, Rated, Prizes!) 补题记录(A~A)
3.Educational Codeforces Round 163 (Rated for Div. 2) 补题记录(A~D)
4.CodeForces Round #951(Div. 2) 补题记录(A~E)5.Codeforces Global Round 26 补题记录(A~C2)6.CodeForces Round #959 sponsored by NEAR (Div. 1 + Div. 2) 补题记录(A~E)7.Codeforces Round 960 (Div. 2) 补题记录(A~D)8.Codeforces Round 961 (Div. 2) 补题记录(A~D)9.Codeforces Round 962 (Div. 3) 补题记录(A~G)10.Pinely Round 4 (Div. 1 + Div. 2) 补题记录(A~F)11.Educational Codeforces Round 168 (Rated for Div. 2) 补题记录(A~E)12.Codeforces Round 963 (Div. 2) 补题记录(A~D,F1)13.Codeforces Round 964 (Div. 4) 补题记录(A~G2)14.Codeforces Round 965 (Div. 2) 补题记录(A,B,D,E1)15.EPIC Institute of Technology Round August 2024 (Div. 1 + Div. 2) 补题记录(A~D1,E)16.Educational Codeforces Round 169 (Rated for Div. 2) 补题记录(A~F)17.Codeforces Round 972 (Div. 2) 补题记录(A~C,E1)18.Codeforces Round 988 (Div. 3) 补题记录(A~G)19.Rayan Programming Contest 2024 - Selection (Codeforces Round 989, Div. 1 + Div. 2) 补题记录(A~E)A
容易发现若
所以若 AAB
,否则必然无解。
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
if (n & 1)
cout << "NO\n";
else {
cout << "YES\n";
for (int i = 1; i <= n / 2; i++)
cout << "AAB";
cout << '\n';
}
}
return 0;
}
B
考虑贪心。
首先若原序列
否则考虑按照下标从小到大来贪心。若一个数拆分成两个数之后和她前面的所有数构成了单调不降,那么就拆分;否则就不拆分。
最后判断一下拆分完之后的序列是否单调不降即可。时间复杂度为
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 500010;
int a[N];
signed main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
if (is_sorted(a + 1, a + n + 1))
cout << "YES\n";
else {
vector<int> arr;
for (int i = 1; i <= n; i++) {
int x = a[i] / 10, y = a[i] % 10;
if (x <= y && (arr.empty() || arr.back() <= x))
arr.push_back(x), arr.push_back(y);
else
arr.push_back(a[i]);
}
if (is_sorted(arr.begin(), arr.end()))
cout << "YES\n";
else
cout << "NO\n";
}
}
return 0;
}
C
考虑记忆化搜索。设
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 500010;
int a[N], n;
char s[4][N];
bool v[4][N];
const int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
void dfs(int u, int v) {
if (::v[u][v]) return;
::v[u][v] = true;
if (::v[2][n]) return;
for (int d = 0; d < 4; d++) {
int x = u + dx[d], y = v + dy[d];
if (x <= 0 || x > 2 || y <= 0 || y > n) continue;
if (s[x][y] == '<') y--;
else y++;
if (x <= 0 || x > 2 || y <= 0 || y > n) continue;
dfs(x, y);
}
}
signed main() {
int T;
cin >> T;
while (T--) {
cin >> n;
for (int i = 1; i <= 2; i++)
for (int j = 1; j <= n; j++)
cin >> s[i][j], v[i][j] = false;
dfs(1, 1);
if (v[2][n]) cout << "YES\n";
else cout << "NO\n";
}
}
D
倒着枚举最长长度
时间复杂度为
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
int T;
cin >> T;
while (T--) {
string s;
cin >> s;
int n = s.size();
s = ' ' + s;
for (int i = n - n % 2; i > 0; i -= 2) {
int mx = 0, now = 0;
for (int l = 1, r = i / 2 + 1; r <= n; l++, r++)
if (s[l] == s[r] || s[l] == '?' || s[r] == '?') now++;
else mx = max(mx, now), now = 0;
mx = max(mx, now);
if (mx >= i / 2) {
cout << i << '\n';
n = -1;
break;
}
}
if (~n)
cout << "0\n";
}
return 0;
}
本文来自博客园,作者:yhbqwq,转载请注明原文链接:https://www.cnblogs.com/yhbqwq/p/18141774,谢谢QwQ
合集:
CodeForces 比赛合集
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)