【赛后总结】トヨタ自動車プログラミングコンテスト2024#9(待补完)

AtCoder Beginner Contest 370 赛后总结

成绩速览:

image

展开目录

A Raise Both Hands-100pts

展开翻译

高桥君决定制作章鱼烧,并给苏介君吃。他告诉苏介君,如果想吃章鱼烧,就举起左手;否则,举起右手。
苏介君举手的结果,用两个整数 \(L,R\) 表示。当 \(L=1\) 时,他举起左手;当 \(R=1\) 时,他举起右手。苏介君并不总是听从指令,他有时举两只手或者不举任何一只手。
如果苏介君只举起左手,代表想吃章鱼烧,请输出 Yes;如果他只举起右手,代表不想吃章鱼烧,请输出 No.如果他两只手都举或者都不举,请输出 'Invalid'.
如果苏介君只举起一只手,说明他遵守了指令。

题面就差没把代码给出来了。

如果 \(L\)\(1\)\(R\)\(0\),输出 Yes;\(R\)\(1\)\(L\)\(0\),输出 No;其他情况输出 Invalid.

展开代码
#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
int a, b;
int main() {
	scanf("%d%d", &a, &b);
	if(a && !b) puts("Yes");
	else if(!a && b) puts("No");
	else puts("Invalid");
	return 0;
}

B Binary Alchemy-200pts

展开翻译

\(N\) 个元素,编号为 \(1,2,...,N\).
你可以合成两个元素 \(i\)\(j\). 当 \(i\ge j\) 时,它们会变为 \(A_{i,j}\);否则,它们变为 \(A_{j,i}\).
使元素 \(1\) 与元素 \(1,2,...,N\) 合成,求问最后得到的结果。

赛时机翻把题意翻译错了,调了好久。

可以看出来,元素 \(i\) 和元素 \(j\) 合成的结果其实就是 \(A_{max\{i,j\},min\{i,j\}}\).

然后一个个合成过去,最后输出就好。

展开代码
#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
int n, a[105][105], ans = 1;
int main() {
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i) for(int j = 1; j <= i; ++j) scanf("%d", a[i] + j);
	for(int i = 1; i <= n; ++i) ans = a[max(ans, i)][min(ans, i)];
	printf("%d\n", ans);
	return 0;
}

C Word Ladder-300pts

展开翻译

给你两个由小写英文字母组成的字符串 \(S,T\).保证 \(|S|=|T|\).
使 \(X\) 为空序列,你可以通过以下操作来使 \(S\) 变成 \(T\).

  • 修改 \(S\) 的一位,之后将当前的 \(S\) 作为一个元素加入到 \(X\) 的末尾。
    \(S=T\) 时,元素最少的 \(X\) 序列。若有多种答案,输出字典序最小的一个。

image
image

的确是一种贪心。

我们发现,当把字典序较大的字母修改成字典序较小的字母时,要修改的字母越靠前,修改出来的结果字典序越小,反之同理。

于是可以用 \(X_i\) 记录第 \(i\) 次更改时 \(S\) 的内容。然后正着扫一遍 \(S\),如果 \(S_i\) 的字典序大于 \(T_i\) 就改,再反着扫一遍把剩下的不同的改了就行。

展开代码
#include <bits/stdc++.h>
#define ll long long
#define MyWife Cristallo
using namespace std;
char s[105], t[105], x[105][105];
int ans = 0;
int main() {
	scanf("%s%s", s, t);
//	if(s == t) puts("0");
//	cerr << ans << endl;
	for(int i = 1; i <= 100; ++i) {
		for(int j = 0; j < strlen(s); ++j) x[i][j] = s[j];
//		cerr << ans << "鸟\n";
	}
//	cerr << ans << endl;
	for(int i = 0; i < strlen(s); ++i) {
		if(s[i] > t[i]) {
			++ans;
			for(int j = ans; j <= 100; ++j) x[j][i] = t[i];
			s[i] = t[i];
//			cerr << ans << "花" << endl;
		}
	}
//	cerr << ans << endl;
	for(int i = strlen(s) - 1; i >= 0; --i) {
		if(s[i] < t[i]) {
			++ans;
			for(int j = ans; j <= 100; ++j) x[j][i] = t[i];
			s[i] = t[i];
		}
	}
	printf("%d\n", ans);
	for(int i = 1; i <= ans; ++i) printf("%s\n", x[i]);
	return 0;
}
posted @ 2024-09-08 15:52  _Kiichi  阅读(30)  评论(0编辑  收藏  举报