且歌且行,眉目轻盈。何妨吟啸且徐行。|

胖柚の工作室

园龄:2年1个月粉丝:2关注:15

2024-08-22 21:58阅读: 6评论: 0推荐: 0

AtCoder Beginner Contest 048

A - AtCoder *** Contest

先输出首字母,然后遍历字符串,遇到空格就输出后面的第一个字符。

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
string s;
getline(cin, s);
cout << s[0];
for (int i = 0; i < s.size(); i++) {
if (s[i] == ' ') cout << s[i + 1];
}
return 0;
}

B - Between a and b ...

如果暴力来做的话肯定会超时。问 [a,b] 之间有多少数可以整除 x,考虑计算 x 的倍数 k。分别用 a 除以 x 上取整、b 除以 x(自然下取整)分别得到 k1k2,则 k1xk2x[a,b] 之间的两个数且能整除 x。答案即为 k2k1+1.

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
i64 a, b, x;
cin >> a >> b >> x;
i64 k1 = (a + x - 1) / x, k2 = b / x;
cout << k2 - k1 + 1;
return 0;
}

C - Boxes and Candies

简单贪心。对于相邻的两个箱子,肯定优先吃右边箱子的糖果,因为其可以兼顾左边和右边。

首先需要注意的是 a[i]+a[i1] 有可能爆 int,需要开 long long

一开始的做法:WA 了最后四个点。

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
int N, x;
cin >> N >> x;
vector<int> a(N);
for (int i = 0; i < N; i++) cin >> a[i];
i64 ans = 0;
for (int i = 1; i < N; i++) {
i64 sum = a[i] + a[i - 1];
if (sum > x) {
i64 t = sum - x;
a[i] -= t;
ans += t;
}
}
cout << ans;
return 0;
}

这里犯的错误在于,a[i]+a[i1]x 多出的那一块,a[i] 不一定够减的,这时就需要将 a[i1] 也减去。

代码:

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
int N, x;
cin >> N >> x;
vector<int> a(N);
for (int i = 0; i < N; i++) cin >> a[i];
i64 ans = 0;
for (int i = 1; i < N; i++) {
i64 sum = a[i] + a[i - 1];
if (sum > x) {
i64 t = sum - x;
if (a[i] >= t) {
a[i] -= t;
ans += t;
} else {
a[i] = 0;
a[i - 1] -= (t - a[i]);
ans += t;
}
}
}
cout << ans;
return 0;
}

D - An Ordinary Game

思维题。

我们发现:当删除到无法删除时,字符串一定是这样的:abababab...abab,即字符串中出现且只出现两种不同的字符,且所有奇数下标位置上的字符相同,所有偶数下标位置上的字符相同,即奇偶交替出现(或只剩两个,但也可以看作这种情况)

哪方操作后率先出现这样的死局,哪方先获胜。当字符串长度为奇数时,首尾字符下标均为奇数,若首尾字符不同则最后一定无法在己方形成死局,己方获胜。反之,当字符串长度为偶数且首尾字符不同时,我做了一步操作之后对方进入必胜态。

当首尾字符相同时,如果字符串长度为奇数我方必败(形成死局),反之则胜。

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
string s;
cin >> s;
int n = s.size();
if ((n % 2 == 1 && s[0] != s[n - 1]) || (n % 2 == 0 && s[0] == s[n - 1])) cout << "First";
else cout << "Second";
return 0;
}

本文作者:pangyou3s

本文链接:https://www.cnblogs.com/pangyou3s/p/18374849

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   胖柚の工作室  阅读(6)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起