学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
小猴有n个朋友,编号依次为1~n。今天小猴买了一幅非常昂贵的油画,决定把它展示给他的朋友们。他把油画挂到一个房间里,他的朋友按照编号从小到大的顺序依次的进入房间赏画,同一时刻,房间中只有一个人。具体来说,第1个朋友进入房间赏画,然后离开房间,接着第2个朋友进入房间赏画,然后离开房间,依次类推。
令人惊讶的是,起初在第一个朋友进入房间的时刻之前,画一直都在房间中挂着,最后,在所有朋友赏画结束之后,画丢失了!
小猴决定持巨资邀请大侦探家侯帅来帮助他找回丢失的油画。根据侯帅的叮嘱,小猴按照朋友编号从小到大顺序依次询问他的朋友在房间中是否看到了油画,每个朋友都回答了以下三个结果中的一个:
1)Yes表示看到过油画;
2)No表示没有看到过油画;
3)?表示不记得了。
根据侯帅初步推测,除了小偷,每个人的回答都是说了实话或者不记得了,小偷可以回答任何结果(三种结果中的一个),显然小偷有且只有一人,但是不能直接确定到底谁是小偷。
小猴同时也持巨资找到了你,请求你根据大侦探家侯帅的推测,帮助他计算有多少人可能是小偷。
【输入】
第一行,包含一个整数n;
接下来n行,每行包含一个字符串
s
i
s_i
si,第i个字符串为
s
i
s_i
si,表示编号为i的朋友的回答结果。
【输出】
第一行,包含一个整数n;
接下来n行,每行包含一个字符串
s
i
s_i
si,第i个字符串为
s
i
s_i
si,表示编号为i的朋友的回答结果。一行,包含一个整数,表示有多少人可能是小偷,如果无法推测出哪些人是小偷,或者说n个朋友的回答结果自相矛盾,则输出-1。
【输入样例】
8
Yes
?
Yes
?
?
No
?
No
【输出样例】
4
【代码详解】
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
string s[N];
int main()
{
int n;
cin >> n;
int l=0, r=0;
for (int i=1; i<=n; i++) {
cin >> s[i];
if (s[i]=="Yes") l=i;
if (s[i]=="No" && r==0) r = i;
}
int ans = n;
if (l!=0) {
ans = ans - l + 1;
}
if (r!=0) {
ans = ans - (n-r);
}
if (ans<=0) cout << -1 << endl;
else cout << ans << endl;
return 0;
}
【运行结果】
8
Yes
?
Yes
?
?
No
?
No
4