目录
L1-093 猜帽子游戏(15分)
题目描述
宝宝们在一起玩一个猜帽子游戏。每人头上被扣了一顶帽子,有的是黑色的,有的是黄色的。每个人可以看到别人头上的帽子,但是看不到自己的。游戏开始后,每个人可以猜自己头上的帽子是什么颜色,或者可以弃权不猜。如果没有一个人猜错、并且至少有一个人猜对了,那么所有的宝宝共同获得一个大奖。如果所有人都不猜,或者只要有一个人猜错了,所有宝宝就都没有奖。
下面顺序给出一排帽子的颜色,假设每一群宝宝来玩的时候,都是按照这个顺序发帽子的。然后给出每一群宝宝们猜的结果,请你判断他们能不能得大奖。
输入格式:
输入首先在一行中给出一个正整数 N(2<N≤100),是帽子的个数。第二行给出 N 顶帽子的颜色,数字 1
表示黑色,2
表示黄色。
再下面给出一个正整数 K(≤10),随后 K 行,每行给出一群宝宝们猜的结果,除了仍然用数字 1
表示黑色、2
表示黄色之外,0
表示这个宝宝弃权不猜。
同一行中的数字用空格分隔。
输出格式:
对于每一群玩游戏的宝宝,如果他们能获得大奖,就在一行中输出 Da Jiang!!!
,否则输出 Ai Ya
。
输入样例:
5
1 1 2 1 2
3
0 1 2 0 0
0 0 0 0 0
1 2 2 0 2
输出样例:
Da Jiang!!!
Ai Ya
Ai Ya
题解
思路:
模拟
根据题目条件,判断一下即可
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int n, k;
int a[N], b[N];
int main() {
cin >> n;
for (int i = 0; i < n; i ++) cin >> a[i];
cin >> k;
while (k -- ) {
int f1 = 0, f2 = 0, f3 = 0;
for (int i = 0; i < n; i ++) cin >> b[i];
for (int i = 0; i < n; i ++)
if (b[i] != 0)
f1 = 1;
for (int i = 0; i < n; i ++)
if (a[i] == b[i])
f2 = 1;
else if (b[i] != 0 && a[i] != b[i])
f3 = 1;
if (f1 && f2 && f3 == 0)
puts("Da Jiang!!!");
else
puts("Ai Ya");
}
return 0;
}
L1-094 剪切粘贴(15分)
题目描述
使用计算机进行文本编辑时常见的功能是剪切功能(快捷键:Ctrl + X)。请实现一个简单的具有剪切和粘贴功能的文本编辑工具。
工具需要完成一系列剪切后粘贴的操作,每次操作分为两步:
- 剪切:给定需操作的起始位置和结束位置,将当前字符串中起始位置到结束位置部分的字符串放入剪贴板中,并删除当前字符串对应位置的内容。例如,当前字符串为
abcdefg
,起始位置为 3,结束位置为 5,则剪贴操作后, 剪贴板内容为cde
,操作后字符串变为abfg
。字符串位置从 1 开始编号。 - 粘贴:给定插入位置的前后字符串,寻找到插入位置,将剪贴板内容插入到位置中,并清除剪贴板内容。例如,对于上面操作后的结果,给定插入位置前为
bf
,插入位置后为g
,则插入后变为abfcdeg
。如找不到应该插入的位置,则直接将插入位置设置为字符串最后,仍然完成插入操作。查找字符串时区分大小写。
每次操作后的字符串即为新的当前字符串。在若干次操作后,请给出最后的编辑结果。
输入格式:
输入第一行是一个长度小于等于 200 的字符串 S,表示原始字符串。字符串只包含所有可见 ASCII 字符,不包含回车与空格。
第二行是一个正整数 N (1≤N≤100),表示要进行的操作次数。
接下来的 N 行,每行是两个数字和两个长度不大于 5 的不包含空格的非空字符串,前两个数字表示需要剪切的位置,后两个字符串表示插入位置前和后的字符串,用一个空格隔开。如果有多个可插入的位置,选择最靠近当前操作字符串开头的一个。
剪切的位置保证总是合法的。
输出格式:
输出一行,表示操作后的字符串。
输入样例:
AcrosstheGreatWall,wecanreacheverycornerintheworld
5
10 18 ery cor
32 40 , we
1 6 tW all
14 18 rnerr eache
1 1 e r
输出样例:
he,allcornetrrwecaneacheveryGreatWintheworldAcross
题解
思路:
考察算法-STL的应用
#include <bits/stdc++.h>
using namespace std;
string s;
int n;
int main() {
cin >> s;
cin >> n;
while (n -- ) {
int a, b;
string s1, s2;
cin >> a >> b >> s1 >> s2;
a --, b --; // 由于字符串是从0开始的
string t = s.substr(a, b - a + 1); // 剪切
string t1 = s1 + s2;
s = s.substr(0, a) + s.substr(b + 1);
//s.erase(a, b - a + 1);
int pos = s.find(t1);
if (pos == -1) s += t; // 粘贴
else
s = s.substr(0, pos + s1.size()) + t + s.substr(pos + s1.size());
}
cout << s;
return 0;
}