SRM 146 DIV1 600
Problem Statement |
|||||||||||||
|
Masterbrain is a two player board game in which one player decides on a secret combination of digits, while the other must figure it out in 10 guesses or less. The game differs from Mastermind in that the player making the secret combination is allowed to lie once. The game consists of one player making a sequence of guesses about what the secret combination is, and the other player giving him or her certain information about the quality of the guess. The following is how each guess is analyzed: if a digit is in the correct position then a black peg is given. If a digit is in the guess but in the wrong position then a white peg is given. For all other cases no pegs are given. For example, if guess = "1234", secret = "2335". Analyzing the guess digit by digit; the '1' is not in secret - no pegs given. The '2' is in secret but not in the right place - white peg given. The '3' is in secret and in the right place - black peg given. The '4' is not in secret - no pegs given. Result should be "1b 1w", meaning one black peg and one white peg. Now, if guess is "2334" and secret is "3224", we have the following: '2' is in secret, but not in the right place - white peg given. The first '3' is in secret, but not in the right place - white peg given. Since the '3' in secret has been used, the second '3' in guess should return no pegs. The '4' is in secret and in the right place - black peg given. Result should be "1b 2w". Given a String[] of guesses and a String[] of results for those guesses, return the total number of possible secret combinations, assuming that exactly one of the results is incorrect. Each element of results will be formatted as "<x>b <y>w", where <x> and <y> are the number of black and white pegs respectively. |
|||||||||||||
Definition |
|||||||||||||
|
|||||||||||||
Limits |
|||||||||||||
|
|||||||||||||
Notes |
|||||||||||||
| - | The second player must lie exactly once. | ||||||||||||
| - | Black pegs always take precedence over white pegs. Thus, when analyzing a guess, black pegs are assigned first, and then white pegs are assigned. | ||||||||||||
| - | No digit in either a guess or a secret combination may be involved in giving more than one peg. | ||||||||||||
Constraints |
|||||||||||||
| - | guesses and results will have the same number of elements. | ||||||||||||
| - | guesses will have between 1 and 10 elements inclusive. | ||||||||||||
| - | results will have between 1 and 10 elements inclusive. | ||||||||||||
| - | each element in guesses will contain exactly 4 characters and will only contain digits between '1' and '7' inclusive. | ||||||||||||
| - | each element in results will contain exactly 5 characters. | ||||||||||||
| - | each element of results will be formatted as follows: "<x>b <y>w", where <x> represents the number of black pegs and <y> represents the number of white pegs in a guess. <x> and <y> are non-negative integers whose sum is less than or equal to 4. | ||||||||||||
| - | results will never have "3b 1w", because that is impossible. | ||||||||||||
Examples |
|||||||||||||
| 0) | |||||||||||||
|
|||||||||||||
| 1) | |||||||||||||
|
|||||||||||||
| 2) | |||||||||||||
|
|||||||||||||
| 3) | |||||||||||||
|
|||||||||||||
| 4) | |||||||||||||
|
|||||||||||||
This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.
本题考虑到总共只有7^4种可能使用枚举暴力实现,在判断某一组合是否符合猜测是需优先考虑block leg
import java.util.*;
import java.util.regex.*;
import java.text.*;
import java.math.*;
import java.awt.geom.*; public class Masterbrain {
boolean detect(int[] combine, int[] guesses, String result) {
int b, w;
b = w = 0;
int[] c = new int[8];
boolean[] ct = new boolean[4];
for (int i = 0; i < 4; i++) {
if (combine[i] == guesses[i]) {
b++;
c[combine[i]]--;
}
c[combine[i]]++;
}
for (int i = 0; i < 4; i++) {
if (c[guesses[i]] == 0)
continue;
if (combine[i] != guesses[i]) {
c[guesses[i]]--;
w++;
}
}
String tmp = String.format("%db %dw", b, w);
return tmp.trim().equalsIgnoreCase(result);
} public int possibleSecrets(String[] guesses, String[] results) {
int count = 0;
for (int i = 1; i < 8; i++)
for (int j = 1; j < 8; j++)
for (int k = 1; k < 8; k++)
for (int l = 1; l < 8; l++) {
int[] combine = new int[] { i, j, k, l };
int fd = 0;
for (int m = 0; m < guesses.length; m++) {
int[] guess = new int[4];
Integer g = Integer.parseInt(guesses[m]);
for (int n = 3; n >= 0; n--) {
guess[n] = g % 10;
g = g / 10;
}
boolean r = detect(combine, guess, results[m]);
if (!r)
fd++;
}
if (fd == 1)
count++;
}
return count;
}
}
SRM 146 DIV1 600的更多相关文章
- SRM 146 DIV1 800
Problem Statement The purpose of a roundabout is to control the flow of traffic at a busy inter ...
- Topcoder SRM 584 DIV1 600
思路太繁琐了 ,实在不想解释了 代码: #include<iostream> #include<cstdio> #include<string> #include& ...
- Topcoder SRM 643 Div1 250<peter_pan>
Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...
- Topcoder Srm 726 Div1 Hard
Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...
- TopCoder SRM 722 Div1 Problem 600 DominoTiling(简单插头DP)
题意 给定一个$12*12$的矩阵,每个元素是'.'或'X'.现在要求$1*2$的骨牌铺满整个矩阵, 'X'处不能放置骨牌.求方案数. 这道题其实和 Uva11270 是差不多的,就是加了一些条件. ...
- 图论 SRM 674 Div1 VampireTree 250
Problem Statement You are a genealogist specializing in family trees of vampires. Vampire famil ...
- SRM 583 DIV1
A 裸最短路. class TravelOnMars { public: int minTimes(vector <int>, int, int); }; vector<int> ...
- SRM 590 DIV1
转载请注明出处,谢谢viewmode=contents">http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlov ...
- Topcoder SRM 602 div1题解
打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...
随机推荐
- makefile小例子
makefile的知识点应该很多,看网上的很多教程就能看出来,长的可以写一本书.记录一下自己用的一个简单的makefile, 方便以后查找. 先看一下程序的目录结构: [root@localhost ...
- Sublime Text 2/3安装使用及常用插件
一.介绍 Sublime Text 是一款较新的编辑器,它轻量.简洁.高效,良好的扩展性以及跨平台等特性,使得越来越多的开发人员喜爱.它是一款收费的商业软件,但可以免费无限制无限期的试用,只会偶尔提醒 ...
- java 记事本 - 实例
记事本记事本实例中使用了以下知识1.ui界面2.io流3.事件监听4.图形5.JFileChooser 类,用于打开文件,另存为文件.弹出文件选择器对话框 学习重点:JFileChooser,有很多方 ...
- JS中两个感叹号!!的意义
var foo = true; console.log(!foo); // false console.log(!!foo); // true 两个 !! 就是 非非 如果值为boolean值 两个感 ...
- 带你入门带你飞Ⅱ 使用Mocha + Chai + SuperTest测试Restful API in node.js
目录 1. 简介 2. 准备开始 3. Restful API测试实战 Example 1 - GET Example 2 - Post Example 3 - Put Example 4 - Del ...
- <概要>
虽然不知道这个博客园网站是中国还是国外,但是我倾向于中国,我是一名爱国者.我喜欢分享自己的学习经验,喜欢学习新的知识. 截止到2016年01月28日我到这个公司的第七天,在这七天里,我学习了一些东西, ...
- java写入文件之txt文本
FileWriter fw=new FileWriter("D:\\test.txt") fw.write("文本值") fw.flush() fw.close ...
- How to pronounce symbols on keyboard
Refefrence: http://answers.yahoo.com/question/index?qid=20100607151104AAtQxhc ~ “tilde” or “tweedle” ...
- 4、IMS
链:1:http://www.cnblogs.com/gnuhpc/archive/2012/12/11/2813494.html [笔记] 1.<计算机网络(第五版)>P10-15:电路 ...
- SQLServer 事务隔离级别
MSSQL 事务级别 分类: 数据库2012-12-28 11:17 1050人阅读 评论(0) 收藏 举报 事务 级别 等级优化数据库 一个系统项目做大了,就会遇到性能问题.数据库的优化将是解决性能 ...