小猴编程周赛C++ | 2022年秋第5周T3侦探任务

学习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
  • 25
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值