T1 连续字符(char)
题目描述
为了吸引参观者,负责园博会信息化展厅建设的小明设计了一个互动节目,参观者找到屏幕上按字典顺序连续的字符串会有礼品,礼品价值和字符长度成正比。例如,ABC
是按字典顺序连续的字符串,而 AAB
和 ABD
都不是。屏幕上的字符串已经将所有字符排序,现在请你找出它的最长字典顺序连续子串。这里,子串指的是字符串的一部分,例如 D
、AB
、ABD
都是 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;
}
(今晚没时间了,等明天在更,敬请期待)