AtCoder Better安装+使用+ABC339A~C讲题
AtCoder Better
你首先需要篡改猴。
如果你用的Google浏览器,请用这个 \(\text{Link}\),不过你可能需要挂个梯子。
如果你用的Firefox浏览器,请用这个 \(\text{Link}\),这个不需要梯子。
如果你用的edge浏览器,请用这个 \(\text{Link}\),这个也不需要梯子。
下载好篡改猴之后,无论什么浏览器,点击这个链接,安装就好了。
这是 AtCoder Better,当然还有 CodeForces Better,直接下载就行了。
ABC339 A~C 讲解
A
题目描述
给你一个由小写英文字母和字符 .
组成的字符串 \(S\)。
输出 \(S\) 中不包含.
的最长后缀。
代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
char s[105];
int main() {
scanf("%s", s + 1);
int len = strlen(s + 1);
string ans = "";
for (int i = len; i >= 1; i--) {
if(s[i] == '.') break;
else ans += s[i];
}
reverse(ans.begin(), ans.end());
cout << ans;
return 0;
}
B
题目描述
有一个行数为 \(H\) 列数为 \(W\) 的网格,起初所有单元格都涂成白色。
这个网格被认为是环形的。也就是说,对于每个 \(1 \leq i \leq H\) , \((i, 1)\) 在 \((i, W)\) 的右边;对于每个 \(1 \leq j \leq W\),\((1, j)\) 在 \((H, j)\) 的下面。
高桥位于\((1, 1)\),并且朝上。在高桥重复下面的操作 \(N\) 次后,打印出网格中每个单元格的颜色。
- 如果当前单元格被涂成白色,则将其重新涂成黑色,顺时针旋转 \(90^\circ\),并沿着他面对的方向向前移动一个单元格。否则,将当前单元格重新涂成白色,逆时针旋转 \(90^\circ\),并沿着他所面对的方向向前移动一个单元格。
思路
按题意模拟即可
代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
int h, w, n;
char s[105][105];
int x = 1, y = 1;
int f = 1;
//1上,2右,3下,4左
int main() {
scanf("%d%d%d", &h, &w, &n);
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= w; j++) {
s[i][j] = '.';
}
}
for (int i = 1; i <= n; i++) {
if(s[x][y] == '.') {
s[x][y] = '#';
f = (f % 4) + 1;
}
else {
s[x][y] = '.';
if(f == 1) f = 4;
else f--;
}
if(f == 1) {
if(x == 1) x = h;
else x--;
}
else if(f == 2) {
y %= w;
y++;
}
else if(f == 3) {
x %= h;
x++;
}
else {
if(y == 1) y = w;
else y--;
}
}
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= w; j++) {
printf("%c", s[i][j]);
}
printf("\n");
}
return 0;
}
C
题目描述
一辆公共汽车正在运营。公共汽车上的乘客人数总是一个非负整数。
在某一时刻,公交车上的乘客人数为零或更多,此后公交车停靠了 \(N\) 次。在第 \(i\) 个站点,乘客人数增加了 \(A_i\)。这里,\(A_i\) 可以是负数,即乘客人数减少了 \(-A_i\)。此外,除了停靠站点外,没有乘客上下车。
请找出与给定题意相符的公交车上最终乘客人数的最小值。
思路讲解
设 \(now\) 为当前公交车上的人数,初始 \(now = 0\),每次停靠站点后,更新 \(now\),如果 \(now<0\) 则将 \(now\) 修改成 \(0\)。\(n\) 次停靠之后 \(now\) 就是答案。
代码环节
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5 + 5;
int n;
long long a[MAXN];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%lld", &a[i]);
}
long long ans = 0;
long long now = 0;
for (int i = 1; i <= n; i++) {
now += a[i];
if(now < 0) {
ans += -now;
now = 0;
}
}
printf("%lld", now);
return 0;
}