P1321 单词覆盖还原
带点小思维
首先,这题的意思就是boy,girl,。这三个单词会相应覆盖,但每个单词至少有一个单词不会被覆盖,那我们观察这三个单词发现,其里面每个字符都没有重复的,也就是说,假设我看到了一个o,那很明显就是boy的,假如看到一个l,那就是girl的,由于我们不知道每个字符被覆盖前是啥字符,那我们可以假设从某个字符开始连着的三个字符串是boy,或者从某个字符开始连着的四个字符串是girl,(因为被覆盖后girl可能会变成g,gi,irl等各种形式,而假设从某个点开始就是girl则包含了这里的所有可能),例..o...y..i.l.gi...r那我们先假设某个下标开始有连着的三个字符boy,那从0下标开始往后遍历,当i便利到1的时候,i+1的位置出现了字符o,那就证明b和y被覆盖了,而遍历到四的时候i+2出现了字符y,说明这个单词boy的bo被覆盖了,有点抽象,自己理解一下,可以在这个样例推一下girl的的情况
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int b, g;
int main()
{
string s;
cin >> s;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == 'b' || s[i + 1] == 'o' || s[i + 2] == 'y') // 只要这三个单词里有任何一个位置满足了b、o、y,就说明这个单词下覆盖了boy,girl同理
b++;
if (s[i] == 'g' || s[i + 1] == 'i' || s[i + 2] == 'r' || s[i + 3] == 'l')
g++;
}
cout << b << '\n'
<< g;
return 0;
}