VP Codeforces Round 897 (Div. 2)
A. green_gold_dog, array and permutation
题意:给你一个数组
我们按
点击查看代码
void solve() {
int n;
std::cin >> n;
std::vector<int> a(n);
for (int i = 0; i < n; ++ i) {
std::cin >> a[i];
}
std::vector<int> id(n);
std::iota(id.begin(), id.end(), 0);
std::sort(id.begin(), id.end(), [&](int i, int j) {
return a[i] > a[j];
});
std::vector<int> ans(n);
for (int i = 0; i < n; ++ i) {
ans[id[i]] = i + 1;
}
for (int i = 0; i < n; ++ i) {
std::cout << ans[i] << " \n"[i == n - 1];
}
}
B. XOR Palindromes
题意:给你一个长度为
我们先看原串两边有几个不一样的,假设为
点击查看代码
void solve() {
int n;
std::cin >> n;
std::string s;
std::cin >> s;
std::string ans(n + 1, '0');
int cnt = 0;
for (int i = 0; i < n / 2; ++ i) {
cnt += s[i] != s[n - 1 - i];
}
for (int i = cnt, j = cnt; j <= n / 2; i += 2, ++ j) {
ans[i] = '1';
if (n % 2 && i + 1 <= n) {
ans[i + 1] = '1';
}
}
std::cout << ans << "\n";
}
C. Salyg1n and the MEX Game
题意:交互题。有一个集合,每次
诈骗题。假设我们已经让
点击查看代码
void solve() {
int n;
std::cin >> n;
std::vector<int> a(n);
for (int i = 0; i < n; ++ i) {
std::cin >> a[i];
}
std::set<int> s;
for (int i = 0; i < n; ++ i) {
s.insert(a[i]);
}
int mex = 0;
while (s.count(mex)) {
++ mex;
}
std::cout << mex << std::endl;
while (1) {
int x;
std::cin >> x;
if (x == -1) {
break;
}
std::cout << x << std::endl;
}
}
D. Cyclic Operations
题意:你有一个全零的数组,你要让他变成
观察发现,如果我们像每个位置要变的数连边,那么会形成一个环,因为每个位置只能连一条出边,所以每条边只在一个环里。也有没在环里的点,但他最终会指向环,这种从环里面搞一些数来配合他就能填好。然后我们考虑怎么填好环里的数。发现如果环的大小不是
点击查看代码
void solve() {
int n, k;
std::cin >> n >> k;
std::vector<int> a(n);
for (int i = 0; i < n; ++ i) {
std::cin >> a[i];
-- a[i];
}
if (k == 1) {
for (int i = 0; i < n; ++ i) {
if (a[i] != i) {
std::cout << "NO\n";
return;
}
}
std::cout << "YES\n";
return;
}
std::vector<int> st(n, -1), b(n);
for (int i = 0; i < n; ++ i) {
if (st[i] == -1) {
int j = i;
int cnt = 0;
while (st[j] == -1) {
st[j] = i;
b[j] = cnt;
j = a[j];
++ cnt;
}
if (st[j] == i && cnt - b[j] != k) {
std::cout << "NO\n";
return;
}
}
}
std::cout << "YES\n";
}
E1/E2 Salyg1n and Array
题意:交互题。有一个数组
如果
否则,因为
点击查看代码
int ask(int x) {
std::cout << "? " << x << std::endl;
int res;
std::cin >> res;
return res;
}
void solve() {
int n, k;
std::cin >> n >> k;
int ans = 0;
for (int i = 1; i <= n - k + 1; i += k) {
ans ^= ask(i);
}
if (n % k == 0) {
std::cout << "! " << ans << std::endl;
return;
}
int len = n % k;
ans ^= ask(n - len / 2 - k + 1);
ans ^= ask(n - k + 1);
std::cout << "! " << ans << std::endl;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具