PTA乙级1089,狼人杀简单版

分析:其实如果读懂题,梳理好条件也不是很难。题目意思n个人中有两人是狼人,说谎有两人,其中一人是好人,一人是狼人。对于第一个用例,即可判断出说谎者是1号和5号,狼人是1号和4号。

首先我们用一个vector存储所有输入数据;
再用两重循环遍历一遍,假设 i 和 j 是狼人,那么在第二重循环下,再使用一个vector标记一下当前两人是狼人,这个vector初始化值全为1,a[i] = a[j] = -1 表示这两人是狼人,其余人是好人;

再申请一个vector用于存储说谎者的编号;
下面就需要知道如何判断说谎者的条件:
自己说abs[v[k]]号是狼人(v[k]<0),然而别人并不是狼人(a[abs(v[k])] == 1)
自己说abs[v[k]]号不是狼人(v[k]>0),然而别人是狼人(a[abs(v[k])] = = -1)
即:v[k]*a[abs(v[k])] < 0

只要指定判断说谎者的条件,即两个说谎者且其中一个为狼人(lie.size()==2&&a[lie[0]]+a[lie[1]]==0),满足此条件输出即可。由于遍历的顺序是从1~n,自然会满足最小序列的要求。满足条件输出此时的 i,j,如果都不满足,输出 No Solution。

    #include<bits/stdc++.h>
    using namespace std;
    
    int main(){
   
        int n;
        cin>>n;
    
        vect
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值