算法训练 黑白无常  
时间限制:1.0s   内存限制:256.0MB
问题描述
某寝室的同学们在学术完之后准备玩一个游戏:游戏是这样的,每个人头上都被贴了一张白色或者黑色的纸,现在每个人都会说一句话“我看到x张白色纸条和y张黑色的纸条”,又已知每个头上贴着白色纸的人说的是真话、每个头上贴着黑色纸的人说的是谎话,现在要求你判断哪些人头上贴着的是白色的纸条,如果无解输出“NoSolution.”;如果有多组解,则把每个答案中贴白条的人的编号按照大小排列后组成一个数(比如第一个人和第三个人头上贴着的是白纸条,那么这个数就是13;如果第6、7、8个人都贴的是白纸条,那么这个数就是678)输出最小的那个数(如果全部都是黑纸条也满足情况的话,那么输出0)
输入格式
第一行为一个整数n,接下来n行中的第i行有两个整数x和y,分别表示第i个人说“我看到x张白色纸条和y张黑色的纸条”。
输出格式
一行。如果无解输出“NoSolution.”。否则输出答案中数值(具体见问题描述)最小的那个,如果全部都是黑纸条也满足情况的话,那么输出0
样例输入
2
1 0
1 0
样例输出
0
样例输入
5
3 1
0 4
1 3
4 0
1 3
样例输出
35
数据规模和约定
n<=8

示例代码:

 1 /*
 2     白纸条: 1
 3     黑纸条: 0
 4 */
 5 #include<iostream>
 6 using namespace std;
 7
 8 int n;                //人数
 9 int cnt;              //有多少种方案
10 int color[10];       //保存每个人头上纸条的颜色
11 int talk[10][2];      //保存每个人说话的内容
12 int result[100];     //保存所有白纸条人序号组成的自然数
13
14 int colorNum(int x, int col)    //检查除自己外还有多少人为白纸条 / 黑纸条
15 {
16     int num = 0;
17     for (int j = 0; j < n; j++)
18     {
19         if (j == x)
20             continue;
21         else if(color[j] == col)
22             num++;
23     }
24     return num;
25 }
26
27 bool check()    //检查说话的真假
28 {
29     bool flag;
30     for (int i = 0; i < n; i++)
31     {
32         flag = (colorNum(i, 1) == talk[i][0] && colorNum(i, 0) == talk[i][1]);
33         if (color[i] == 1)    //白纸人说真话
34         {
35             if (!flag)
36                return false;
37         }
38         else                //黑纸人说假话
39         {
40             if (flag)
41                return false;
42         }
43     }
44     return true;
45 }
46
47 void dfs(int now)
48 {
49     if (now == n)
50     {
51         if (check())    //如果检查正确
52         {
53             int temp = 0;
54             for (int i = 0; i < n; i++)
55             {
56                 if (color[i] == 1)      //计算此种方案时白纸人序号组成的自然数
57                       temp = temp * 10 + i + 1;
58                }
59             result[cnt++]=temp;
60         }
61         return;
62     }
63
64     color[now] = 1;    //白纸人
65     dfs(now+1);
66
67     color[now] = 0;    //黑纸人
68     dfs(now+1);
69 }
70
71 int main()
72 {
73     cin >> n;
74
75     cnt = 0;
76
77     for (int i = 0; i < n; i++)
78         cin >> talk[i][0] >> talk[i][1];
79
80     dfs(0);
81
82     if (cnt == 0)    //如果没有白纸人
83         cout<<"NoSolution."<<endl;
84     else            //找出所有方案中最小的一个数
85     {
86         int minNum = 987654321;
87         for (int i = 0; i < cnt; i++)
88         {
89             if (minNum > result[i])
90                 minNum = result[i];
91         }
92         cout << minNum;
93     }
94
95     return 0;
96 }

转载于:https://www.cnblogs.com/cao-lei/p/7217857.html

蓝桥杯 算法训练 ALGO-114 黑白无常相关推荐

  1. 蓝桥杯 算法训练 幸运的店家

    蓝桥杯 算法训练 幸运的店家 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 炫炫开了一家商店,卖的货只有一个,XXX,XXX卖N元钱.有趣的是,世界上只有面值为3的幂的纸 ...

  2. 蓝桥杯 算法训练 Beaver's Calculator

    蓝桥杯 算法训练 Beaver's Calculator 问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器,他将此命名为"Beaver's Calculator ...

  3. 蓝桥杯 算法训练 印章

    蓝桥杯 算法训练 印章 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入输出: 一行两个正整数n和m 一个实数P表示答案,保留4位小数. 样例: 2 3 ...

  4. 蓝桥杯算法训练-24点(Python)

    问题描述 24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加.减.乘.除以及括号想办法得到24, ...

  5. 蓝桥杯——算法训练——数字三角形

    蓝桥杯--算法训练--数字三角形 这道题不难,但是比较典型,可以作为动态规划(dp)的入门篇,属于线性dp(LIS,LCS和数字三角形都是此类题型). ------------------------ ...

  6. 蓝桥杯算法训练-强力党逗志芃

    持续更新蓝桥杯算法训练题解,有兴趣可以关注一波呀 题目 逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学技能.现在我们可以了解到,每个技能都有一个前提技能,只有学完了前提技能才能学习当前 ...

  7. 蓝桥杯 算法训练 逗志芃的危机

    蓝桥杯 算法训练 逗志芃的危机 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和 ...

  8. 蓝桥杯算法训练-过河马

    蓝桥杯算法训练题解有兴趣的可以支持下. 题目 问题描述 在那个过河卒逃过了马的控制以超级超级多的走法走到了终点之后,这匹马表示它不开心了-- 于是,终于有一天,它也过河了! 由于过河马积累了许多的怨念 ...

  9. 蓝桥杯——算法训练——进击的青蛙

    问题描述 青蛙X正准备跳过一座桥,这座桥被划分为N段,记青蛙所在的起始点为0,桥的末端为N.桥上的一些点有一些石子,这些点是无法跳上去的.青蛙每次跳跃能向前跳跃+1,+2,+3段,现在请你算出跳到末端 ...

  10. 蓝桥杯算法训练合集十三 1.P06022.P07033.逗志芃的危机4.唯一的小可爱5.JOE的矩阵

    目录 1.P0602 2.P0703 3.逗志芃的危机 4.唯一的傻子 5.JOE的矩阵 1.P0602 问题描述 编写一个程序,输入一个4位的自然数,将组成该数的各位数字重新排列,形成一个最大数和一 ...

最新文章

  1. [密码学] 杂凑函数
  2. 计算机教育日志,信息技术日志1
  3. 20162330 刘伟康_预备作业03
  4. 带你手写基于 Spring 的可插拔式 RPC 框架(四)代理类的注入与服务启动
  5. UE4之判断点是否在矩形内
  6. PYTHON读取EXCEL内容再转变成HTML添加到OUTLOOK中
  7. 网络干货,无论是运维还是开发都要知道的网络知识系列之(八)
  8. Java:项目启动报错java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)
  9. 51单片机蜂鸣器实现歌曲《起风了》代码
  10. docker部署svnadmin进行权限管理
  11. 网络操作系统发展历程
  12. 金庸的武侠世界和SAP的江湖
  13. 动态SQL与SQL注入(一)动态SQL
  14. 老慜的A5作业——p5.js 动态、周期、随机、面向对象
  15. C语言之#error/#warning
  16. 仿百度贴吧回帖功能分析及代码示例
  17. 民营中小企业融资难的原因
  18. 德国 DocuWare 文档管理软件平台
  19. 短序列比对利器-bwa
  20. 大学生程序设计大赛官网

热门文章

  1. Java JUI打字小游戏项目
  2. 如何让IE9或IE8打开多个网页时只保留一个IEXPLORE.EXE进程
  3. 当当当~他来喽CCRC-PIP个人信息保护专业人员
  4. BZOJ 3110 题解
  5. python小说电子书阅读系统毕业设计开题报告
  6. 常用关于验证的正则表达式(EMai,Website,Money,Mobile)
  7. Teigha 40010 保存设置Wipeout时的边界显示问题
  8. last_load_time和last_active_time的选择
  9. centos上使用Dropbox
  10. 60.(leaflet之家)leaflet虚线