Codeforces Round 934 (Div. 2)
1.Codeforces Round 896 (Div. 2)2.Codeforces Round 895 (Div. 3)3.Codeforces Round 897 (Div. 2)4.CodeTON Round 6 (Div. 1 + Div. 2, Rated, Prizes!)5.Codeforces Round 898 (Div. 4)6.Educational Codeforces Round 155 (Rated for Div. 2)7.Codeforces Round 899 (Div. 2)8.Codeforces Round 900 (Div. 3)9.Codeforces Round 627 (Div. 3)10.Codeforces Round 901 (Div. 2)11.Codeforces Round 902 (Div. 2, based on COMPFEST 15 - Final12.Educational Codeforces Round 156 (Rated for Div. 2)13.Codeforces Round 887 (Div. 2)14.Codeforces Round 905 (Div. 3)15.Codeforces Round 906 (Div. 2)16.Codeforces Round 909 (Div. 3)17.Codeforces Round 910 (Div. 2)18.Educational Codeforces Round 158 (Rated for Div. 2)19.CodeTON Round 7 (Div. 1 + Div. 2, Rated, Prizes!)20.Codeforces Round 911 (Div. 2)21.Codeforces Round 914 (Div. 2)22.Educational Codeforces Round 159 (Rated for Div. 2)23.Codeforces Round 919 (Div. 2)24.Codeforces Round 920 (Div. 3)25.Educational Codeforces Round 161 (Rated for Div. 2)26.Codeforces Round 921 (Div. 2)27.Codeforces Round 924 (Div. 2)28.Codeforces Round 925 (Div. 3)29.Codeforces Round 927 (Div. 3)30.Educational Codeforces Round 162 (Rated for Div. 2)31.Codeforces Round 929 (Div. 3)32.Educational Codeforces Round 160 (Rated for Div. 2)33.Codeforces Round 930 (Div. 2)34.Codeforces Round 931 (Div. 2)35.Codeforces Round 932 (Div. 2)36.Codeforces Round 933 (Div. 3)37.Educational Codeforces Round 163 (Rated for Div. 2)
38.Codeforces Round 934 (Div. 2)
39.Codeforces Round 955 (Div. 2, with prizes from NEAR!)40.Educational Codeforces Round 167 (Rated for Div. 2)41.Codeforces Round 960 (Div. 2)(A - D)42.Pinely Round 4 (Div. 1 + Div. 2)(A - F)Codeforces Round 934 (Div. 2)
A - Destroying Bridges
解题思路:
完全图每个点的连边数为
:都可到达。 :将点 的边删完,只能呆在点 。
代码:
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<ll, ll>;
#define fi first
#define se second
using piii = pair<ll, pair<ll, ll>>;
const ll inf = 1ll << 60;
using ull = unsigned long long;
const int mod = 998244353;
void solve()
{
int n, k;
cin >> n >> k;
if (k >= n - 1)
{
cout << 1 << endl;
}
else
{
cout << n << endl;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1;
cin >> t;
while (t--)
{
solve();
}
return 0;
}
B - Equal XOR
解题思路:
对于每个数字只有三种情况:
- 只出现在
- 只出现在
- 一个出现在
,另一个出现在
前两种情况数目肯定是相同的。
我们先用前两种成对分别填入
代码:
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<ll, ll>;
#define fi first
#define se second
using piii = pair<ll, pair<ll, ll>>;
const ll inf = 1ll << 60;
using ull = unsigned long long;
const int mod = 998244353;
void solve()
{
int n, k;
cin >> n >> k;
vector<int> a(2 * n + 2);
for (int i = 1; i <= 2 * n; i++)
{
cin >> a[i];
}
vector<int> l, r;
vector<int> vis(2 * n + 10);
// 2, 3, 4
for (int i = 1; i <= n; i++)
{
vis[a[i]] += 1;
}
for (int i = n + 1; i <= 2 * n; i++)
{
vis[a[i]] += 2;
}
vector<int> ls, rs, t;
for (int i = 1; i <= n; i++)
{
if (vis[a[i]] == 3)
{
t.push_back(a[i]);
}
else if (vis[a[i]] == 2)
{
ls.push_back(a[i]);
}
}
for (int i = n + 1; i <= 2 * n; i++)
{
if (vis[a[i]] == 4)
{
rs.push_back(a[i]);
}
}
sort(ls.begin(), ls.end());
ls.erase(unique(ls.begin(), ls.end()), ls.end());
sort(rs.begin(), rs.end());
rs.erase(unique(rs.begin(), rs.end()), rs.end());
for (int i = 0; i < min(ls.size(), rs.size()) && l.size() < 2 * k; i++)
{
l.push_back(ls[i]);
l.push_back(ls[i]);
r.push_back(rs[i]);
r.push_back(rs[i]);
}
for (int i = 0; i < t.size() && l.size() < 2 * k; i++)
{
l.push_back(t[i]);
r.push_back(t[i]);
}
// int t1 = 0;
// int t2 = 0;
for (auto x : l)
{
cout << x << ' ';
// t1 ^= x;
}
cout << "\n";
for (auto x : r)
{
cout << x << ' ';
// t2 ^= x;
}
cout << "\n";
// if (t1 == t2)
// {
// puts("YES");
// }
// // for (int i = 1; i <= n; i++)
// // {
// // t1 ^= a[i];
// // }
// for (int i = n + 1; i <= 2 * n; i++)
// {
// t2 ^= a[i];
// }
// cout << t1 << ' ' << t2 << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1;
cin >> t;
while (t--)
{
solve();
}
return 0;
}
C - MEX Game 1
解题思路:
出现次数大于
所以我们按照
代码:
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<ll, ll>;
#define fi first
#define se second
using piii = pair<ll, pair<ll, ll>>;
const ll inf = 1ll << 60;
using ull = unsigned long long;
const int mod = 998244353;
void solve()
{
int n;
cin >> n;
vector<int> a(n + 1);
map<int, int> cnt;
vector<bool> vis(n + 1);
for (int i = 1; i <= n; i++)
{
cin >> a[i];
cnt[a[i]]++;
}
for (auto t : cnt)
{
if (t.se >= 2)
{
vis[t.fi] = true;
}
}
int cur = 0;
while (vis[cur])
{
cur++;
}
for (int i = 1; i <= n; i++)
{
while (vis[cur])
{
cur++;
}
if (cnt[cur] == 1)
{
cnt[cur]--;
vis[cur] = true;
}
else
{
break;
}
while (vis[cur])
{
cur++;
}
if (cnt[cur] == 1)
{
cnt[cur]--;
}
}
int ans = 0;
while (vis[ans])
{
ans++;
}
cout << ans << endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1;
cin >> t;
while (t--)
{
solve();
}
return 0;
}
D - Non-Palindromic Substring
解题思路:
:肯定回文。 :单独判断 : 为奇数:只要整个区间不是 这种交叉形式,奇数子串一定都存在。如果 不存在,意味着整个区间都是 这种交叉形式。 为偶数:只要整个区间字符不是都一样,偶数子串一定都存在。如果 不存在,意味着整个区间都是一样的。
注意:本题疑似卡了单哈希,如果要用哈希判断整体是否回文,建议使用双哈希映射。
判断整体回文:
判断奇数是否存在:
- 思路一:
, 。 - 思路二:哈希判断
是否完全相同。
判断偶数是否存在:
- 思路一:
, 。 - 思路二:区间最大最小值相同。
代码:
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<ll, ll>;
#define fi first
#define se second
using piii = pair<ll, pair<ll, ll>>;
const ll inf = 1ll << 60;
using ull = unsigned long long;
const int P = 13331;
std::vector<int> manacher(std::string s)
{
std::string t = "#";
for (auto c : s)
{
t += c;
t += '#';
}
int n = t.size();
std::vector<int> r(n);
for (int i = 0, j = 0; i < n; i++)
{
if (2 * j - i >= 0 && j + r[j] > i)
{
r[i] = std::min(r[2 * j - i], j + r[j] - i);
}
while (i - r[i] >= 0 && i + r[i] < n && t[i - r[i]] == t[i + r[i]])
{
r[i] += 1;
}
if (i + r[i] > j + r[j])
{
j = i;
}
}
return r;
}
void solve()
{
int n, q;
cin >> n >> q;
string s;
cin >> s;
auto rad = manacher(s);
string str = s;
s = ' ' + s;
vector<ull> h(n + 1), p(n + 1), h1(n + 10);
p[0] = 1;
for (int i = 1; i <= n; i++)
{
p[i] = p[i - 1] * P;
h[i] = h[i - 1] * P + s[i];
}
reverse(str.begin(), str.end());
str = ' ' + str;
for (int i = 1; i <= n; i++)
{
h1[i] = h1[i - 1] * P + str[i];
}
auto get1 = [&](int l, int r) -> ull
{
return h[r] - h[l - 1] * p[r - l + 1];
};
auto get2 = [&](int l, int r) -> ull
{
return h1[r] - h1[l - 1] * p[r - l + 1];
};
vector<vector<int>> f(n + 1, vector<int>(22)), g(n + 1, vector<int>(22, 1e9));
for (int j = 0; (1 << j) <= n; j++)
{
for (int i = 1; i + (1 << j) - 1 <= n; i++)
{
if (j == 0)
{
f[i][j] = s[i];
}
else
{
f[i][j] = max(f[i][j - 1], f[i + (1 << j - 1)][j - 1]);
}
}
}
auto q1 = [&](int l, int r)
{
int len = (r - l + 1);
int k = log(len) / log(2);
return max(f[l][k], f[r - (1 << k) + 1][k]);
};
for (int j = 0; (1 << j) <= n; j++)
{
for (int i = 1; i + (1 << j) - 1 <= n; i++)
{
if (j == 0)
{
g[i][j] = s[i];
}
else
{
g[i][j] = min(g[i][j - 1], g[i + (1 << j - 1)][j - 1]);
}
}
}
auto q2 = [&](int l, int r)
{
int len = (r - l + 1);
int k = log(len) / log(2);
return min(g[l][k], g[r - (1 << k) + 1][k]);
};
while (q--)
{
int l, r;
cin >> l >> r;
ll len = r - l + 1;
ll ans = 0;
// if (len & 1)
// {
// ll t = len / 2;
// if (get1(l, l + t - 1) != get2(n - r + 1, n - (l + t + 1) + 1))
// {
// ans += len;
// }
// }
// else
// {
// ll t = len / 2;
// if (get1(l, l + t - 1) != get2(n - r + 1, n - (l + t) + 1))
// {
// ans += len;
// }
// }
// cout << ans << endl;
if (rad[l + r - 1] <= len)
{
ans += len;
}
if (q1(l, r) != q2(l, r))
{
ll up = len;
if (len & 1)
{
up--;
}
else
{
up -= 2;
}
ll k = up / 2;
ans += (2 + up) * k / 2;
}
if (len > 3 && get1(l, r - 2) != get1(l + 2, r))
{
ll up = len;
if (len & 1)
{
up -= 2;
}
else
{
up--;
}
ll k = up / 2;
ans += (3 + up) * k / 2;
}
cout << ans << "\n";
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1;
cin >> t;
while (t--)
{
solve();
}
return 0;
}
合集:
Codeforces
分类:
Codeforces
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY