欢迎访问我的pat顶级题解目录哦 https://blog.csdn.net/richenyunqi/article/details/86751676

题目描述

算法设计

这道题是pat甲级1148 Werewolf - Simple Version、pat乙级1089 狼人杀-简单版的升级版,依然采取暴力枚举的方法。将每个人所说的话保存在一维数组aa[1]-a[n]中。利用深度优先搜索从n向1逐个玩家地进行枚举,枚举的每个玩家有两种情况:

  1. 该玩家是狼人,则将该玩家的编号存储在set<int>ans变量中
  2. 该玩家不是狼人,则枚举下一玩家

DFS递归函数终止条件是当枚举的玩家编号为0或者ans的长度为m时,结束当前搜索,如果ans的长度为m,则ans中的元素即为所有狼人玩家的编号,然后判断这种情况下是否满足题设条件即可。具体实现可见代码。

C++代码

#include<bits/stdc++.h>
using namespace std;
int n,m,l,a[105];
set<int>ans;//存储狼人玩家编号
void DFS(int index,bool&f){//深度优先搜索,f标记是否有满足题设条件的情况if(index==0||ans.size()==m){//枚举到0号玩家或m个狼人玩家枚举完毕if(ans.size()==m){//m个狼人玩家枚举完毕int liars=0,wereliars=0;//撒谎的人的数量,狼人中撒谎的人的数量for(int i=1;i<=n;++i)//遍历a数组if((a[i]>0)^(ans.find(abs(a[i]))==ans.end())){//当前遍历到的玩家在撒谎++liars;//递增撒谎人的数量if(ans.find(i)!=ans.end())//撒谎的人是狼人++wereliars;//递增狼人中撒谎的人的数量}if(liars==l&&wereliars>0&&wereliars<n)//满足题设条件,f设为truef=true;}return;//返回上层函数}ans.insert(index);//当前玩家是狼DFS(index-1,f);//继续枚举下一玩家if(f)//找到了符合题设条件的情况return;//返回上层函数ans.erase(index);//当前玩家不是狼DFS(index-1,f);//继续枚举下一玩家
}
int main(){scanf("%d%d%d",&n,&m,&l);for(int i=1;i<=n;++i)scanf("%d",&a[i]);bool f=false;DFS(n,f);if(f)for(auto i=ans.rbegin();i!=ans.rend();++i)//倒序输出printf("%s%d",i==ans.rbegin()?"":" ",*i);elseputs("No Solution");return 0;
}

pat顶级1022 Werewolf (35 point(s))相关推荐

  1. PAT TOP 1022. Werewolf (35)

    问题描述: 1022. Werewolf (35) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Werewol ...

  2. PAT Top 1022 Werewolf (35)

    PAT Top 1022 Werewolf (35) 题目描述 Input Specification: Output Specification: Sample Input: Sample Outp ...

  3. 1022 Werewolf (35 分)(C++)

    PAT顶级题解目录​​​​​​​ Werewolf(狼人杀) is a game in which the players are partitioned into two parties: the ...

  4. PAT 1022. Werewolf (35)

    暴力+剪枝--我还想再优化点,试着提交一下居然过了 #include<iostream> #include<vector> #include<cmath> usin ...

  5. pat顶级1003 Universal Travel Sites (35 point(s))

    欢迎访问我的pat顶级题解目录哦 https://blog.csdn.net/richenyunqi/article/details/86751676 题目描述 算法设计 这道题是图论的最大流问题,关 ...

  6. pat顶级1004 To Buy or Not to Buy - Hard Version (35 point(s))

    欢迎访问我的pat顶级题解目录哦 https://blog.csdn.net/richenyunqi/article/details/86751676 题目描述 算法设计 这道题没什么好办法,只能进行 ...

  7. PAT甲级1022 Digital Library (30分):[C++题解]结构体、排序、查询

    文章目录 题目分析 题目链接 题目分析 分析: 一本书信息由6个,想到用结构体来存. 至于每一个信息可以用string来存,而关键字在想使用vector<string> keywords还 ...

  8. PAT学习资料汇总(PAT甲级、PAT顶级、PAT考试经验)

    二.PAT甲级 PAT甲级真题目录(按题型整理) PAT甲级真题目录(按题型整理)_love music.的博客-CSDN博客_pat甲级真题 PAT甲[所有题目+解析+代码示例+总结]附带所有历年整 ...

  9. T1022 Werewolf (35 point(s))

    T1022 Werewolf (35 point(s)) 文章目录 T1022 Werewolf (35 point(s)) 题干 Input Specification: Output Specif ...

最新文章

  1. Xamarin 2017.11.9更新
  2. 2011年9月最新整理的10个有趣的jQuery插件集合
  3. 解决windows10下面无法抓取charles数据包问题
  4. Russell大师课+大厂专家倾授+5小时黑客松,上海临港人工智能开发者大会倒计时5天...
  5. 第4章:分布式数据库 HBase
  6. android使用menu需要重写的方法,Android – 正确使用invalidateOptionsMenu()
  7. 多线程篇-NSThread-简单使用
  8. lua正则替换_lua 字符串 正则表达式 转义 特殊字符
  9. C、C++和MFC中文件的操作
  10. 说说说vue.js中的组
  11. ux.form.field.Year 只能选年的时间扩展
  12. mybatis SqlMapConfig.xml typeAliases
  13. 使用bind构建本地简易dns服务器
  14. 以下是adb工具包最新Google官方版下载地址:
  15. 算法设计与分析(第2版)屈婉玲 刘田 张立昂 王捍贫编著 第五章课后习题答案
  16. 什么是TrustedInstaller管理权限?
  17. android字体右对齐,Android TextView将文本右对齐和左对齐
  18. 基于docker一行命令搭建个人博客wordPress
  19. 安装mysql报msvcr100_解决安装mysql 提示msvcr100.dill 丢失,的最快方法
  20. PROXIMITY_SCREEN_OFF_WAKE_LOCK 分析

热门文章

  1. Unity中左手坐标系和右手坐标系的区分
  2. 【Linux】应用篇九--线程的取消与互斥
  3. python中elif什么意思_python中elif指的是什么
  4. 十、初始化DockerSwarm集群及创建overlay网络
  5. 如何在文件夹中建立网页的快捷方式
  6. 4键电子手表说明书_ins电子手表说明书,4键电子手表说明书
  7. 华为OD机试题 - 星际篮球争霸赛(JavaScript)| 包含代码编写思路
  8. winform打开Excel读取数据并显示到datagridview中
  9. 分享一个JVM的在线图,特别细致和全面,绝对是大神级别制作的jvm图,我们一起来参观一下吧
  10. 实时直播流量统计分析及可视化系统————老子明天不加班系列