VP Educational Codeforces Round 157 (Rated for Div. 2)
A. Treasure Chest
题意:你要经过
如果
否则尽量把
点击查看代码
void solve() {
int x, y, k;
std::cin >> x >> y >> k;
if (y <= x) {
std::cout << x << "\n";
} else {
std::cout << std::max(y, 2 * (y - x - k) + x + k) << "\n";
}
}
B. Points and Minimum Distance
题意:把
单独看一个坐标,我们肯定希望能递增或递减的走,否则走过去一点又走回来肯定走的更多。
那么我们把所有数组排序,因为起点到终点要包含
点击查看代码
void solve() {
int n;
std::cin >> n;
std::vector<int> a(2 * n);
for (int i = 0; i < 2 * n; ++ i) {
std::cin >> a[i];
}
std::sort(a.begin(), a.end());
std::cout << (a[n - 1] - a[0] + a[2 * n - 1] - a[n]) << "\n";
for (int i = 0; i < n; ++ i) {
std::cout << a[i] << " " << a[i + n] << "\n";
}
}
C. Torn Lucky Ticket
题意:又
直接枚举每个数字作为较长的那一部分的贡献,分为在前面时和在后面时。用
点击查看代码
void solve() {
int n;
std::cin >> n;
std::vector<std::map<int, int> > cnt(6);
std::vector<std::string> a(n);
for (int i = 0; i < n; ++ i) {
std::cin >> a[i];
}
auto get = [&](std::string s) -> int {
int res = 0;
for (auto & c : s) {
res = res + c - '0';
}
return res;
};
std::sort(a.begin(), a.end(), [&](std::string & a, std::string & b) {
return a.size() < b.size();
});
i64 ans = 0;
for (int i = 0; i < n; ++ i) {
int len = a[i].size();
for (int j = len; j > len / 2; -- j) {
int x = get(a[i].substr(0, j)), y = get(a[i].substr(j));
ans += cnt[j * 2 - len][x - y];
}
for (int j = len; j > len / 2; -- j) {
int x = get(a[i].substr(len - j)), y = get(a[i].substr(0, len - j));
ans += cnt[j * 2 - len][x - y];
}
cnt[len][get(a[i])] += 1;
}
std::cout << ans + n << "\n";
}
D. XOR Construction
题意:给定一个数组
点击查看代码
struct TrieWith01 {
std::vector<std::array<int, 2> > tr;
int idx;
int creat() {
tr.push_back({});
idx += 1;
return idx;
}
TrieWith01() {
creat();
idx = 0;
}
void insert(int x) {
int p = 0;
for (int i = 30; i >= 0; -- i) {
int s = x >> i & 1;
if (!tr[p][s]) {
tr[p][s] = creat();
}
p = tr[p][s];
}
}
int xor_max(int x) {
int p = 0;
int res = 0;
for (int i = 30; i >= 0; -- i) {
int s = x >> i & 1;
if (tr[p][!s]) {
res += 1 << i;
p = tr[p][!s];
} else {
p = tr[p][s];
}
}
return res;
}
};
void solve() {
int n;
std::cin >> n;
std::vector<int> a(n);
for (int i = 0; i + 1 < n; ++ i) {
std::cin >> a[i];
}
TrieWith01 tr;
int sum = 0;
for (int i = 0; i + 1 < n; ++ i) {
sum ^= a[i];
tr.insert(sum);
}
std::vector<int> b(n);
for (int i = 0; i < n; ++ i) {
int x = tr.xor_max(i);
if (x == n - 1 || (x == n - 2 && i == n - 1)) {
b[0] = i;
for (int j = 1; j < n; ++ j) {
b[j] = b[j - 1] ^ a[j - 1];
}
break;
}
}
for (int i = 0; i < n; ++ i) {
std::cout << b[i] << " \n"[i == n - 1];
}
}
分类:
codeforces
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!