Codeforces Round 1002 (Div. 2)
A. Milya and Two Arrays
题意:给你两个长度为
统计
点击查看代码
void solve() {
int n;
std::cin >> n;
std::set<int> a, b;
for (int i = 0; i < n; ++ i) {
int x;
std::cin >> x;
a.insert(x);
}
for (int i = 0; i < n; ++ i) {
int x;
std::cin >> x;
b.insert(x);
}
if (a.size() + b.size() >= 4) {
std::cout << "YES\n";
} else {
std::cout << "NO\n";
}
}
B. Cost of the Array time limit per test1 second
题意:给你一个长度为
我们让所有的
注意要特判
点击查看代码
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];
}
if (n == k) {
for (int i = 1, j = 1; i < n; i += 2, j ++ ) {
if (a[i] != j) {
std::cout << j << "\n";
return;
}
}
std::cout << k / 2 + 1 << "\n";
return;
} else {
for (int i = 1; i < n - (k - 2); ++ i) {
if (a[i] != 1) {
std::cout << 1 << "\n";
return;
}
}
std::cout << 2 << "\n";
}
}
C. Customer Service
题意:给你
记录每个数组的后缀和与后缀长度相等的位置,那么保留这一段位置可以得到一个数字。于是我们从小到大枚举
点击查看代码
void solve() {
int n;
std::cin >> n;
std::vector a(n, std::vector<int>(n));
for (int i = 0; i < n; ++ i) {
for (int j = 0; j < n; ++ j) {
std::cin >> a[i][j];
}
a[i].push_back(0);
std::reverse(a[i].begin(), a[i].end());
}
std::vector<std::set<std::pair<int, int> > > s(n + 1);
std::vector<int> b(n);
for (int i = 0; i < n; ++ i) {
i64 t = 0;
for (int j = 0; j <= n; ++ j) {
t += a[i][j];
if (j == n || t != j) {
b[i] = j;
break;
}
}
for (int j = 0; j < b[i]; ++ j) {
s[j].insert({b[i], i});
}
}
for (int i = 0; i <= n; ++ i) {
if (s[i].empty()) {
std::cout << i << "\n";
return;
}
auto [_, x] = *s[i].begin();
s[i].erase(s[i].begin());
for (int j = 0; j < b[x]; ++ j) {
s[j].erase({b[x], x});
}
}
}
D. Graph and Graph
题意:给你两个由
显然我们让两个图都到一个相同的点
那么可以考虑最短路,
最后枚举每个
点击查看代码
void solve() {
int n, s1, s2;
std::cin >> n >> s1 >> s2;
-- s1, -- s2;
std::vector g1(n, std::vector<int>(n));
std::vector g2(n, std::vector<int>(n));
std::vector<std::vector<int> > adj1(n);
std::vector<std::vector<int> > adj2(n);
int m1, m2;
std::cin >> m1;
for (int i = 0; i < m1; ++ i) {
int u, v;
std::cin >> u >> v;
-- u, -- v;
g1[u][v] = g1[v][u] = 1;
adj1[u].push_back(v);
adj1[v].push_back(u);
}
std::cin >> m2;
for (int i = 0; i < m2; ++ i) {
int u, v;
std::cin >> u >> v;
-- u, -- v;
g2[u][v] = g2[v][u] = 1;
adj2[u].push_back(v);
adj2[v].push_back(u);
}
const int inf = 1e9;
std::vector dist(n, std::vector<int>(n, inf));
std::vector vis(n, std::vector<int>(n));
using A = std::array<int, 3>;
std::priority_queue<A, std::vector<A>, std::greater<A> > heap;
dist[s1][s2] = 0;
heap.push({0, s1, s2});
while (heap.size()) {
auto [_, x, y] = heap.top(); heap.pop();
if (vis[x][y]) {
continue;
}
for (auto & i : adj1[x]) {
for (auto & j : adj2[y]) {
if (dist[i][j] > dist[x][y] + std::abs(i - j)) {
dist[i][j] = dist[x][y] + std::abs(i - j);
if (!vis[i][j]) {
heap.push({dist[i][j], i, j});
}
}
}
}
}
int ans = inf;
for (int i = 0; i < n; ++ i) {
for (int j = 0; j < n; ++ j) {
if (g1[i][j] && g2[i][j]) {
ans = std::min(ans, dist[i][i]);
}
}
}
if (ans == inf) {
ans = -1;
}
std::cout << ans << "\n";
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具