Atcoder Beginner Contest 366

比赛链接: Atcoder Beginner Contest 366

Github 链接: ABC366

A - Election 2

只有 \(T\) 或者 \(A\) 大于等于 \(N\) 的一半的时候输出 Yes,否则输出 No

#include <bits/stdc++.h>
using namespace std;
 
inline int read() {
	int x = 0, f = 1; char c = getchar();
	while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }
	while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
	return x * f;
}
 
int main() {
	int n = read(), t = read(), a = read();
	if (t > n / 2 || a > n / 2) puts("Yes");
	else puts("No");
	return 0;
}

B - Vertical Writing

按照题意模拟。

#include <bits/stdc++.h>
using namespace std;
 
int n, len = 0;
string s[105];
 
int main() {
	ios::sync_with_stdio(false); cin.tie(0);
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> s[i];
		int size = s[i].size();
		len = max(len, size); // 记录最大长度
	}
	for (int i = 0; i < len; i++) {
		int num = 0;
		for (int j = n; j; j--) {
			int size = s[j].size();
			if (i < size) {
				for (int i = 1; i <= num; i++) putchar('*');
				num = 0;
				putchar(s[j][i]);
			}
			else num++; // 避免 * 出现在字符串末尾
		}
		putchar('\n');
	}
	return 0;
}

C - Balls and Bag Query

用数组记录写有 \(x\) 的球个数,同时记录有多少种不同的球。

#include <bits/stdc++.h>
using namespace std;
 
const int N = 1e6 + 10;
int q, vis[N], num = 0;
 
inline int read() {
	int x = 0, f = 1; char c = getchar();
	while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }
	while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
	return x * f;
}
 
int main() {
	for (int i = 0; i <= 1000000; i++) vis[i] = 0;
	q = read();
	for (int i = 1; i <= q; i++) {
		int opt = read();
		if (opt == 3) printf("%d\n", num);
		else {
			int x = read();
			if (opt == 1) {
				if (!vis[x]) num++;
				vis[x]++;
			}
			if (opt == 2) {
				vis[x]--;
				if (!vis[x]) num--;
			}
		}
	}
	return 0;
}

D - Cuboid Sum Query

三维数组的前缀和,具体实现看代码。

#include <bits/stdc++.h>
using namespace std;
 
#define int long long
 
const int N = 105;
int n, q, a[N][N][N], b[N][N], sum[N][N][N];
 
inline int read() {
	int x = 0, f = 1; char c = getchar();
	while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }
	while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
	return x * f;
}
 
signed main() {
	n = read();
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			for (int k = 1; k <= n; k++) {
				a[i][j][k] = read();
				b[i][j] += a[i][j][k];
				sum[i][j][k] = sum[i - 1][j][k] + sum[i][j - 1][k] - sum[i - 1][j - 1][k] + b[i][j];
			}
		}
	}
	q = read();
	while (q--) {
		int l1 = read(), r1 = read(), l2 = read(), r2 = read(), l3 = read(), r3 = read();
		l1--, l2--, l3--;
		int ans = sum[r1][r2][r3] - sum[l1][r2][r3] - sum[r1][l2][r3] - sum[r1][r2][l3] + sum[l1][l2][r3] + sum[l1][r2][l3] + sum[r1][l2][l3] - sum[l1][l2][l3];
		printf("%lld\n", ans);
	}
	return 0;
}
posted @ 2025-06-25 13:53  nuo534202  阅读(2)  评论(0)    收藏  举报