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;
}
posted @ 2024-02-03 22:45  ljlbj_fengyuwuzu  阅读(1086)  评论(0编辑  收藏  举报