【链接】 我是链接,点我呀:)

【题意】

给你一个长度为4的数字序列(每个数字都在0~9之间,且不重复出现)
现在让你猜这个长度为4的序列是什么.
猜了之后对方会告诉有几个数字是位置和数字都正确的(猜的数字序列有顺序)
以及有几个数字是数字出现了但是位置不正确.
即给你两个反馈。
现在给你n个猜的过程(猜的4个数字以及对应的两个反馈)
问你是否能唯一的确定一个4位数字的答案

【题解】

列举出来最后的4位数的所有可能。
对于每一种可能 将其对这n个猜的过程验证一遍》
如果验证通过,那么递增sum
最后如果sum==1则说明存在唯一的一个可能.
sum==0说明没有任何一个可能,则数据有错
sum>1则说明需要更多的数据才能确定是哪一个.

【代码】

  1. import java.io.*;
  2. import java.util.*;
  3. public class Main {
  4. static int N = (int)10;
  5. static String s[];
  6. static int b[],c[],n,ans[],sum,final_ans[];
  7. static boolean bo[];
  8. static boolean flag[];
  9. public static boolean check(){
  10. for (int i = 1;i <= n;i++){
  11. for (int j = 0;j <= 9;j++) flag[j] = false;
  12. int cnt1 = 0,cnt2 = 0;
  13. for (int j = 0;j < 4;j++)
  14. if ( (s[i].charAt(j)-'0') == ans[j+1]){
  15. cnt1++;
  16. }else{
  17. flag[s[i].charAt(j)-'0'] = true;
  18. }
  19. for (int j = 1;j <= 4;j++)
  20. if (flag[ans[j]]==true){
  21. cnt2++;
  22. }
  23. if(cnt1==b[i] && cnt2==c[i]){
  24. continue;
  25. }else return false;
  26. }
  27. return true;
  28. }
  29. public static void dfs(int dep){
  30. if (sum>=2) return;
  31. if (dep==5){
  32. if (check()==true){
  33. for (int i = 1;i <= 4;i++) final_ans[i] = ans[i];
  34. sum++;
  35. }
  36. return;
  37. }
  38. for (int i = 0;i <= 9;i++)
  39. if (bo[i]==false){
  40. bo[i] = true;
  41. ans[dep] = i;
  42. dfs(dep+1);
  43. bo[i] = false;
  44. }
  45. }
  46. public static void main(String args[]){
  47. Scanner in = new Scanner(System.in);
  48. bo = new boolean[N+10];
  49. s = new String[N+10];
  50. b = new int[N+10];c = new int[N+10];
  51. ans = new int[N+10];
  52. flag = new boolean[N+10];
  53. final_ans = new int[N+10];
  54. sum = 0;
  55. n = in.nextInt();
  56. for (int i = 1;i <= n;i++){
  57. s[i] = in.next();b[i] = in.nextInt();c[i] = in.nextInt();
  58. }
  59. dfs(1);
  60. if (sum==0){
  61. System.out.println("Incorrect data");
  62. }else if (sum==1){
  63. for (int j = 1;j <= 4;j++)
  64. System.out.print(final_ans[j]);
  65. }else{
  66. System.out.print("Need more data");
  67. }
  68. }
  69. }

【Codeforces 63C】Bulls and Cows的更多相关文章

  1. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  2. 【33.10%】【codeforces 604C】Alternative Thinking

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  3. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  4. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

  5. 【codeforces 709D】Recover the String

    [题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...

  6. 【codeforces 709B】Checkpoints

    [题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...

  7. 【codeforces 709C】Letters Cyclic Shift

    [题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...

  8. 【Codeforces 429D】 Tricky Function

    [题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...

  9. 【Codeforces 670C】 Cinema

    [题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...

随机推荐

  1. 华为FusionSphere概述——计算资源、存储资源、网络资源的虚拟化,同时对这些虚拟资源进行集中调度和管理

    华为FusionSphere概述 FusionSphere是华为自主知识产权的云操作系统,集虚拟化平台和云管理特性于一身,让云计算平台建设和使用更加简捷,专门满足企业和运营商客户云计算的需求.华为云操 ...

  2. go语言笔记——go环境变量goroot是安装了路径和gopath是三方包路径

    Go 环境变量 Go 开发环境依赖于一些操作系统环境变量,你最好在安装 Go 之间就已经设置好他们.如果你使用的是 Windows 的话,你完全不用进行手动设置,Go 将被默认安装在目录 c:/go  ...

  3. P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper 状压dp

    这个状压dp其实很明显,n < 18写在前面了当然是状压.状态其实也很好想,但是有点问题,就是如何判断空间是否够大. 再单开一个g数组,存剩余空间就行了. 题干: 题目描述 A little k ...

  4. Maya Calendar

    http://poj.org/problem?id=1008 按第一种记录方法算出总天数,然后按第二种记录方式输出. #include<stdio.h> #include<strin ...

  5. codevs2503失恋28天......(背包dp)

    503 失恋28天-缝补礼物  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold   题目描述 Description 话说上回他给女孩送了n件礼物,由于是廉价的所以 ...

  6. Linux 本命令 基本上用到的命令-自己留着用

    1:在某个目录下查找文件: find /data -name '*srm*' 2:监测文件流: tail –f  /data/log.xml 3:   删除文件: rm –f /data/log.xm ...

  7. BZOJ 4668 LCT

    思路: 这不是LCT裸题嘛23333 (好像并查集+按秩合并就可以搞了 我还是too young) 维护边权的话 就新加一个点 代表边 这个点想线段的两个端点连边就好了 //By SiriusRen ...

  8. 【BZOJ3328】PYXFIB(数学)

    什么都不会的数学蒻菜瑟瑟发抖--Orz橙子(和兔子) 题目: BZOJ3328 分析: 橙子给我安利的数学题--(然后我就看着他因为矩阵乘法多模了一次卡了一天常数qwq表示同情) 先考虑一个子问题:求 ...

  9. <assert.h>

    Diagnostics 定义宏: void assert (scalar-expression); 若expression为0,则打印出错信息(类似Assertion failed: expressi ...

  10. 15、Scala隐式转换和隐式参数

    1.隐式转换 2.使用隐式转换加强现有类型 3.隐式转换函数的作用域与导入 4.隐式转换发生时机 5.隐式参数 1.隐式转换 要实现隐式转换,只要程序可见的范围内定义隐式转换函数即可.Scala会自动 ...