2020年团体程序设计天梯赛-总决赛 L1-6 吃火锅

  • L1-6 吃火锅 (15分)
    • 输入样例 1:
    • 输出样例 1:
    • 输入样例 2:
    • 输出样例 2:
  • 题解

L1-6 吃火锅 (15分)

chg.jpg

以上图片来自微信朋友圈:这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”,那就厉害了,我们的故事就开始了。

本题要求你实现一个程序,自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1

输入格式:
输入每行给出一句不超过 80 个字符的、以回车结尾的朋友信息,信息为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。当读到某一行只有一个英文句点 . 时,输入结束,此行不算在朋友信息里。

输出格式:
首先在一行中输出朋友信息的总条数。然后对朋友的每一行信息,检查其中是否包含 chi1 huo3 guo1,并且统计这样厉害的信息有多少条。在第二行中首先输出第一次出现 chi1 huo3 guo1 的信息是第几条(从 1 开始计数),然后输出这类信息的总条数,其间以一个空格分隔。题目保证输出的所有数字不超过 100。

如果朋友从头到尾都没提 chi1 huo3 guo1 这个关键词,则在第二行输出一个表情 -_-#

输入样例 1:

Hello!
are you there?
wantta chi1 huo3 guo1?
that's so li hai le
our story begins from chi1 huo3 guo1 le
.

输出样例 1:

5
3 2

输入样例 2:

Hello!
are you there?
wantta qi huo3 guo1 chi1huo3guo1?
that's so li hai le
our story begins from ci1 huo4 guo2 le
.

输出样例 2:

5
-_-#
作者 陈越
单位 浙江大学
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB

题解

cnt 记录 信息的总条数
huoguo 记录 第一次出现 chi1 huo3 guo1 的信息是第几条
hgcnt 记录 吃火锅信息有多少条
flag 判断 输入是否结束

find() 函数 判断信息中是否含有 chi1 huo3 guo1

#include
#include
using namespace std;
string goal = "chi1 huo3 guo1";
string s;
bool find() {
	int len = s.length();
	for(int i=0; i<=len-14; ++i) {
		if(goal == s.substr(i,14)) {
			return true;
		}
	}
	return false;
}
int main() {
	bool flag = true;
	int huoguo = 0, hgcnt = 0;
	int cnt = 0;
	do {
		getline(cin,s);
		if(s == ".") {
			flag = false;
		} else {
			cnt++;
			if(find()) {
				if(huoguo == 0) {
					huoguo = cnt;
				}
				hgcnt++;
			}
		}
	} while(flag);
	printf("%d\n",cnt);
	if(huoguo) {
		printf("%d %d\n",huoguo,hgcnt);
	} else {
		printf("-_-#\n");
	}
	return 0;
}

你可能感兴趣的:(天梯赛,题解,c++)