VP Educational Codeforces Round 7
A. Infinite Sequence
题意:一个数列是由
发现前
点击查看代码
void solve() {
i64 n;
std::cin >> n;
i64 l = 0, r = 1e9;
while (l < r) {
i64 mid = l + r + 1 >> 1ll;
if (mid * (mid + 1) / 2 < n) {
l = mid;
} else {
r = mid - 1;
}
}
n -= l * (l + 1) / 2;
std::cout << n << "\n";
}
B. The Time
题意:给你一个时间,求
模拟进位即可。
点击查看代码
void solve() {
std::string s;
std::cin >> s;
int a = 0;
std::cin >> a;
a %= 60 * 24;
int b[] = {10, 10, 0, 6, 10};
for (int i = 4; i >= 0; -- i) {
if (s[i] == ':') {
continue;
}
int x = s[i] - '0' + a;
s[i] = '0' + (x % b[i]);
a = x / b[i];
}
int x = (s[0] - '0') * 10 + s[1] - '0';
x %= 24;
s[0] = x / 10 + '0';
s[1] = x % 10 + '0';
std::cout << s << "\n";
}
C. Not Equal on a Segment
题意:给你一个数组,每次求
把每个数出现的位置存下来。然后二分出大于等于
点击查看代码
void solve() {
int n, m;
std::cin >> n >> m;
std::vector<int> a(n);
for (int i = 0; i < n; ++ i) {
std::cin >> a[i];
}
const int N = 1e6 + 5;
std::vector<std::vector<int>> pos(N);
for (int i = 0; i < n; ++ i) {
pos[a[i]].push_back(i);
}
while (m -- ) {
int l, r, x;
std::cin >> l >> r >> x;
-- l, -- r;
int pl = std::lower_bound(pos[x].begin(), pos[x].end(), l) - pos[x].begin();
int pr = std::lower_bound(pos[x].begin(), pos[x].end(), r) - pos[x].begin();
if (pl == pos[x].size() || pos[x][pl] != l) {
std::cout << l + 1 << "\n";
continue;
}
if (pr == pos[x].size() || pos[x][pr] != r) {
std::cout << r + 1 << "\n";
continue;
}
int L = pl, R = pr;
while (L < R) {
int mid = L + R >> 1;
if (pos[x][mid] - l != mid - pl) {
R = mid;
} else {
L = mid + 1;
}
}
if (pos[x][L] - l == L - pl) {
std::cout << -1 << "\n";
} else {
std::cout << pos[x][L] << "\n";
}
}
}
D. Optimal Number Permutation
题意:有一个
发现乘式前面是固定的,考虑怎么操作后面,
点击查看代码
void solve() {
int n;
std::cin >> n;
std::vector<int> ans(n * 2);
for (int i = 0, x = 1; x < n; ++ i, x += 2) {
ans[i] = ans[i + n - x] = x;
}
for (int i = (n / 2 + n % 2) * 2, x = 2; x < n; ++ i, x += 2) {
ans[i] = ans[i + n - x] = x;
}
for (int i = 0; i < 2 * n; ++ i) {
if (ans[i] == 0) {
ans[i] = n;
}
}
for (int i = 0; i < 2 * n; ++ i) {
std::cout << ans[i] << " \n"[i == 2 * n - 1];
}
}
E. Ants in Leaves
题意:给你一棵树,每个叶子上有一只蚂蚁,除根节点外,其它节点一个时刻只能由一直蚂蚁,求所有蚂蚁到根节点的最短时间。
因为根节点没有限制,所以可以讨论根节点的每个子树,对于每棵子树,如果只有一个叶子,那么答案就是
点击查看代码
void solve() {
int n;
std::cin >> n;
std::vector<std::vector<int>> adj(n);
for (int i = 1; i < n; ++ i) {
int u, v;
std::cin >> u >> v;
-- u, -- v;
adj[u].push_back(v);
adj[v].push_back(u);
}
std::vector<int> t;
std::vector<int> d(n);
auto dfs = [&](auto self, int u, int fa) -> void {
bool leap = true;
for (auto & v : adj[u]) {
if (v == fa) {
continue;
}
d[v] = d[u] + 1;
leap = false;
self(self, v, u);
}
if (leap) {
t.push_back(d[u]);
}
};
int ans = 0;
for (auto & u : adj[0]) {
t.clear();
d[u] = 1;
dfs(dfs, u, 0);
std::sort(t.begin(), t.end());
for (int i = 1; i < t.size(); ++ i) {
t[i] = std::max(t[i], t[i - 1] + 1);
}
ans = std::max(ans, t.back());
}
std::cout << ans << "\n";
}
分类:
codeforces
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具