2023蜀山区小学组信息学竞赛分析

发布时间 2023-10-29 21:28:37作者: Reminiscences

T1 连续字符(char)

题目描述

为了吸引参观者,负责园博会信息化展厅建设的小明设计了一个互动节目,参观者找到屏幕上按字典顺序连续的字符串会有礼品,礼品价值和字符长度成正比。例如,ABC 是按字典顺序连续的字符串,而 AABABD 都不是。屏幕上的字符串已经将所有字符排序,现在请你找出它的最长字典顺序连续子串。这里,子串指的是字符串的一部分,例如 DABABD 都是 ABD 的子串。

输入格式

第一行是 1 个整数 N ,表示字符串的长度。

之后一行一个仅包括大写字母的字符串。

输出格式

输出按字典顺序连续的最长子串长度。

样例

3
ABG
2

解释#1

子串 AB 是按字典顺序连续的,且没有比它更长的符合题意的子串。

5
KLMPQ
3
18
ACDEGHIKNOPQSTUWYZ
4

解释#3

一个长度为 4 且按字典顺序连续的子串是 NOPQ。没有比它更长的符合题意的子串。

数据范围

1 ≤ N ≤ 26


分析

这题比较水,主要考数组连续性,注意一下条件判断和s的赋值即可。

代码

#include <bits/stdc++.h>
using namespace std;
int n, s = 1, maxn;
string a;
int main() {
	freopen("char.in", "r", stdin);
	freopen("char.out", "w", stdout);//文件操作
	cin >> n >> a;
	for (int i = 1; i < a.size(); i++) {
		if (a[i] == a[i - 1] + 1) {
			s++;
		} else {
			maxn = max(maxn, s);
			s = 1;
		}
	}
	maxn = max(maxn, s);
	cout << maxn;
	return 0;
}

T2 寻找座位(seat)

题目描述

园博会的展区面积很大,接驳不同展区间的电动车需要提前预约,参观者凭成功预约信息才能坐车。因此发车前会进行频繁的订票/退票操作。现在有一辆特殊电动车,里面有 N 排,每排 5 个座位,每个座位用 1 表示已预订,0 表示未预订。小明负责安排这辆车下一趟的座位,按时间顺序收到了 M 个订票(D)或者退票(T)信息,请你帮小明编写程序,看剩余座位是否能满足每一个要求。

输入格式

第一行是两个正整数 N 和 M,N 表示园博会电动车上的座位排数,M 表示系统收到的订/退票信息。

接下来是 N 行,每行 5 个数字,表示座位是否被占用,0 表示未被占用,1表示已经占用。

N 行座位信息后是 M 行订票/退票操作,其中 D 表示订票、T 表示退票。

输出格式

针对 M 个订票/退票操作,按顺序给出座位是否能满足需求的判断结果,Yes 表示可以满足要求,No 表示不能满足。

样例

6 4
11111
11101
11011
11111
10001
10001
D 5
T 2
D 6
T 3
Yes
Yes
No
Yes

解释#1

满足了前两个需求后,不再有足够的座位满足第三个需求。第三个需求应该被拒绝并忽略其影响。

数据范围

1 ≤ ? ≤ 1000,1 ≤ ? ≤ 100000,1 ≤ 单次订退票数量 ≤ 10000

分析

这题也很简单,后两题再详细说,这里只需要注意一下判断就好了。

代码

#include <bits/stdc++.h>
using namespace std;
int n, m, c, s1, s2;
char d;
string a;
int main() {
	freopen("seat.in", "r", stdin);
	freopen("seat.out", "w", stdout);//文件操作
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> a;
		for (int j = 0; j < a.size(); j++) {
			if (a[j] == '1') {
				s1++;
			} else {
				s2++;
			}
		}
	}
	for (int i = 1; i <= m; i++) {
		cin >> d >> c;
		if (d == 'D') {
			if (c <= s2) {
				s2 -= c, s1 += c;
				cout << "Yes\n";
			} else {
				cout << "No\n";
			}
		} else {
			if (c <= s1) {
				s1 -= c, s2 += c;
				cout << "Yes\n";
			} else {
				cout << "No\n";
			}
		}
	}
	return 0;
}

(今晚没时间了,等明天在更,敬请期待)