以下文字摘自《灵机一动·好玩的数学》:“狼人杀”游戏分为狼人、好人两大阵营。在一局“狼人杀”游戏中,1 号玩家说:“2 号是狼人”,2 号玩家说:“3 号是好人”,3 号玩家说:“4 号是狼人”,4 号玩家说:“5 号是好人”,5 号玩家说:“4 号是好人”。已知这 5 名玩家中有 2 人扮演狼人角色,有 2 人说的不是实话,有狼人撒谎但并不是所有狼人都在撒谎。扮演狼人角色的是哪两号玩家?

本题是这个问题的升级版:已知 N 名玩家中有 2 人扮演狼人角色,有 2 人说的不是实话,有狼人撒谎但并不是所有狼人都在撒谎。要求你找出扮演狼人角色的是哪几号玩家?

输入格式:

输入在第一行中给出一个正整数 N(5≤N≤100)。随后 N 行,第 i 行给出第 i 号玩家说的话(1≤i≤N),即一个玩家编号,用正号表示好人,负号表示狼人。

输出格式:

如果有解,在一行中按递增顺序输出 2 个狼人的编号,其间以空格分隔,行首尾不得有多余空格。如果解不唯一,则输出最小序列解 —— 即对于两个序列 A=a[1],...,a[M] 和 B=b[1],...,b[M],若存在 0≤k<M 使得 a[i]=b[i] (i≤k),且 a[k+1]<b[k+1],则称序列 A 小于序列 B。若无解则输出 No Solution

输入样例 1:

5
-2
+3
-4
+5
+4

结尾无空行

输出样例 1:

1 4

结尾无空行

输入样例 2:

6
+6
+3
+1
-5
-2
+4

结尾无空行

输出样例 2(解不唯一):

1 5

结尾无空行

输入样例 3:

5
-2
-3
-4
-5
-1

结尾无空行

输出样例 3:

No Solution

结尾无空行

题目分析

用一个vector记录每个玩家的证词

然后从小到大枚举所有狼人存在的情况,对每一种情况,都遍历vector,如果满足有俩人撒谎还有一个是狼人,那就直接输出并return 0。

AC代码

#include <iostream>
#include <vector>
using namespace std;
vector<int> words;
int main(){int N;cin>>N;words.resize(N);for (int i = 0; i < N;i++){scanf("%d", &(words[i]));}for (int i = 1; i < N;i++){for (int j = i + 1; j <= N;j++){int liars = 0;//记录撒谎的人数int is_wolf = 0;//记录撒谎的狼人数for (int k = 0; k < words.size();k++){//遍历words数组,看看序号为k+1的狗东西有没有说谎if(words[k]<0)//说的是坏人{//又不是狼人if(words[k]!=-i&&words[k]!=-j){liars++;if(k+1 == i||k+1 == j)//撒谎的还是个狼人is_wolf++;}}else //说的是好人{//又是狼人if(words[k]==i||words[k]==j){liars++;if(k+1==i||k+1==j)//撒谎的还是个狼人is_wolf++;}}}if(liars==2&&is_wolf==1)//撒谎的有俩人还有一个是狼人!{cout << i << ' ' << j;return 0;}}}cout << "No Solution";return 0;
}

总结

判断撒谎人数那一部分肯定有好多可以优化的地方 不过我好懒啊

PAT 乙级 1089 狼人杀-简单版相关推荐

  1. PAT 乙级 1089  狼人杀-简单版

    1089 狼人杀-简单版 (20 point(s)) 以下文字摘自<灵机一动·好玩的数学>:"狼人杀"游戏分为狼人.好人两大阵营.在一局"狼人杀"游 ...

  2. Pat乙级1089 狼人杀-简单版

    Pat乙级1084 思路 代码 题目网址 https://pintia.cn/problem-sets/994805260223102976/problems/1038429385296453632 ...

  3. PAT乙级 1089 狼人杀-简单版 (20 分)

    以下文字摘自<灵机一动·好玩的数学>:"狼人杀"游戏分为狼人.好人两大阵营.在一局"狼人杀"游戏中,1 号玩家说:"2 号是狼人" ...

  4. C++学习之路 | PTA乙级—— 1089 狼人杀-简单版(精简)

    1089 狼人杀-简单版 (20 分)以下文字摘自<灵机一动·好玩的数学>:"狼人杀"游戏分为狼人.好人两大阵营.在一局"狼人杀"游戏中,1 号玩家 ...

  5. PAT乙级B1089 狼人杀-简单版 (20 分)

    以下文字摘自<灵机一动·好玩的数学>:"狼人杀"游戏分为狼人.好人两大阵营.在一局"狼人杀"游戏中,1 号玩家说:"2 号是狼人" ...

  6. 【PAT乙级】狼人杀-简单版(暴力逻辑)

    以下文字摘自<灵机一动·好玩的数学>:"狼人杀"游戏分为狼人.好人两大阵营.在一局"狼人杀"游戏中,1 号玩家说:"2 号是狼人" ...

  7. pat basic 1089 狼人杀-简单版

    以下文字摘自<灵机一动·好玩的数学>:"狼人杀"游戏分为狼人.好人两大阵营.在一局"狼人杀"游戏中,1 号玩家说:"2 号是狼人" ...

  8. PAT Basic Level 1089 狼人杀-简单版 解题思路及AC代码 v0.96

    PAT 乙级 1089 狼人杀-简单版 1. 题目简述及在线测试位置 2. 基本思路 3. 完整AC代码 1. 题目简述及在线测试位置 1.1 N个人玩狼人杀,每个人 按从1到N的编号 顺序说明他人的 ...

  9. 「PAT乙级真题解析」Basic Level 1089 狼人杀-简单版 (问题分析+完整步骤+伪代码描述+提交通过代码)

    乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范.从小白开始逐步掌握用编程解决问题. PAT (Basic Level) Practice 1089 狼人杀-简单版 问题分析 题 ...

最新文章

  1. 如何在CPU上优化GEMM矩阵乘法
  2. 旋转框检测方法综述:RotateAnchor系列
  3. 01_字符串处理-----02_标准化
  4. 1024程序员节获奖通知
  5. u盘版linux initramfs,Linux_内核升级后 出现initramfs错误问题解决, 出现initramfs找不到/root /hos - phpStudy...
  6. 让你的网站首页自动选择语言转跳
  7. java契约_基于契约式设计的Java编译器实现
  8. nodejs小问题:express不是内部或外部命令
  9. 企业信息安全模型(成熟度模型)
  10. 浙江利捷分析报告(0612)
  11. python 人脸对比--百度API人脸相似度识别(超简单)
  12. Java泛型对象的实例化
  13. 无线网卡 VS 无线上网卡
  14. 苹果支付IAP V1
  15. 亚马逊多店铺统一管理还不会关联?原来是靠它
  16. 虚幻蓝图数据传递_数据产品的战略蓝图
  17. word excel转pdf,pdf合并,插入页码
  18. 软件项目管理课程复习题
  19. 可变步长最小均方 (VSS-LMS) 算法附matlab代码
  20. 加密算法之SHA(SHA1、SHA256)

热门文章

  1. django-channels实现群聊
  2. 根据浏览器滚动条高度判断进度条显示
  3. 荣耀实力碾压众互联网手机品牌,2017年或是“荣耀年”
  4. 【电气专业知识问答】问:什么是励磁系统阶跃响应?
  5. Queue和LinkLink的关系
  6. MQ 系列之初识消息中间件
  7. 人工智能:未来人工智能的发展趋势是怎样的?
  8. Spring高手之路7——事件机制与监听器的全面探索
  9. Gurobi教程——C++ API概览
  10. 数据库两大神器:索引和锁