VP Toyota Programming Contest 2024#11(AtCoder Beginner Contest 379)
A - Cyclic
题意:按题意输出三个字符。
点击查看代码
void solve() {
std::string s;
std::cin >> s;
std::cout << s[1] << s[2] << s[0] << " " << s[2] << s[0] << s[1] << "\n";
}
B - Strawberries
题意:题意,每连续的
枚举计数即可。
点击查看代码
void solve() {
int n, k;
std::cin >> n >> k;
std::string s;
std::cin >> s;
int ans = 0;
for (int i = 0; i < n; ++ i) {
if (s[i] == 'O') {
int j = i;
while (j < n && s[j] == 'O') {
++ j;
}
ans += (j - i) / k;
i = j;
}
}
std::cout << ans << "\n";
}
C - Sowing Stones
题意:要在
从左到右模拟,每次把多出来的石头都移过来,操作数就是一个等差序列的和。最后判断是不是刚好铺满就行。
点击查看代码
void solve() {
int n, m;
std::cin >> n >> m;
std::vector<i64> a(m), b(m);
for (int i = 0; i < m; ++ i) {
std::cin >> a[i];
}
for (int i = 0; i < m; ++ i) {
std::cin >> b[i];
}
std::vector<int> id(m);
std::iota(id.begin(), id.end(), 0);
std::sort(id.begin(), id.end(), [&](int i, int j) {
return a[i] < a[j];
});
a.push_back(n);
i64 last = 0, sum = 0;
i64 ans = 0;
for (auto & i : id) {
if (a[i] - last - 1 > sum) {
std::cout << -1 << "\n";
return;
}
ans += (a[i] - last) * (sum + sum - (a[i] - last) + 1) / 2;
sum -= a[i] - last - 1;
sum += b[i] - 1;
last = a[i];
}
if (n - last != sum) {
std::cout << -1 << "\n";
return;
}
ans += (n - last) * (sum + sum - (n - last) + 1) / 2;
std::cout << ans << "\n";
}
D. Home Garden
题意:三个操作:
- 种下一颗树,初始高度为
。 - 等待
天。所有树长高 。 - 收割高度大于等于
的树。
用一个队列模拟即可,每次种树是加入一个高度为当前时间的树,然后收割的时候把所有当前时间减记录的高度大于等于
点击查看代码
void solve() {
int n;
std::cin >> n;
i64 t = 0;
std::queue<i64> q;
while (n -- ) {
int op;
std::cin >> op;
if (op == 1) {
q.push(t);
} else if (op == 2) {
int x;
std::cin >> x;
t += x;
} else if (op == 3) {
int h;
std::cin >> h;
int ans = 0;
while (q.size() && t - q.front() >= h) {
++ ans;
q.pop();
}
std::cout << ans << "\n";
}
}
}
E - Sum of All Substrings
题意:给你一个大数字,求它所有字串表示数字的和。
拆贡献,考虑每一位的贡献,发现第
点击查看代码
void solve() {
int n;
std::cin >> n;
std::string s;
std::cin >> s;
std::vector<i64> d(n + 11);
for (int i = 0; i < n; ++ i) {
i64 t = (i64)(i + 1) * (s[i] - '0');
d[1] += t;
d[n - i + 1] -= t;
}
for (int i = 1; i <= n + 10; ++ i) {
d[i] += d[i - 1];
}
std::vector<i64> ans;
for (int i = 1; i <= n + 10; ++ i) {
ans.push_back(d[i] % 10);
d[i + 1] += d[i] / 10;
}
while (ans.size() > 1 && ans.back() == 0) {
ans.pop_back();
}
std::reverse(ans.begin(), ans.end());
for (auto & x : ans) {
std::cout << x;
}
std::cout << "\n";
}
F - Buildings 2
题意:给你一个数组,每次询问
如果是询问
现在的条件就是加了一个位置要大于
点击查看代码
void solve() {
int n, q;
std::cin >> n >> q;
std::vector<int> a(n);
for (int i = 0; i < n; ++ i) {
std::cin >> a[i];
}
std::vector<std::vector<std::pair<int, int> > > Q(n);
std::vector<int> ans(q);
for (int i = 0; i < q; ++ i) {
int l, r;
std::cin >> l >> r;
-- l, -- r;
Q[l].push_back({r, i});
}
std::vector<int> stk;
for (int i = n - 1; i >= 0; -- i) {
for (auto & [j, id] : Q[i]) {
int l = 0, r = (int)stk.size() - 1;
while (l < r) {
int mid = l + r + 1>> 1;
if (stk[mid] > j) {
l = mid;
} else {
r = mid - 1;
}
}
if (stk[l] <= j) {
ans[id] = 0;
} else {
ans[id] = l + 1;
}
}
while (stk.size() && a[stk.back()] < a[i]) {
stk.pop_back();
}
stk.push_back(i);
}
for (int i = 0; i < q; ++ i) {
std::cout << ans[i] << "\n";
}
}
分类:
atcoder
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具