Counterfeit Dollar

Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 415  Solved: 237

Description

Sally Jones has a dozen Voyageur silver dollars. However, only eleven of the coins are true silver dollars; one coin is counterfeit even though its color and size make it indistinguishable from the real silver dollars. The counterfeit coin has a different weight from the other coins but Sally does not know if it is heavier or lighter than the real coins.  Happily, Sally has a friend who loans her a very accurate balance scale. The friend will permit Sally three weighings to find the counterfeit coin. For instance, if Sally weighs two coins against each other and the scales balance then she knows these two coins are true. Now if Sally weighs  one of the true coins against a third coin and the scales do not balance then Sally knows the third coin is counterfeit and she can tell whether it is light or heavy depending on whether the balance on which it is placed goes up or down, respectively.  By choosing her weighings carefully, Sally is able to ensure that she will find the counterfeit coin with exactly three weighings.

Input

The first line of input is an integer n (n > 0) specifying the number of cases to follow. Each case consists of three lines of input, one for each weighing. Sally has identified each of the coins with the letters A--L. Information on a weighing will be given by two strings of letters and then one of the words ``up'', ``down'', or ``even''. The first string of letters will represent the coins on the left balance; the second string, the coins on the right balance. (Sally will always place the same number of coins on the right balance as on the left balance.) The word in the third position will tell whether the right side of the balance goes up, down, or remains even. 

Output

For each case, the output will identify the counterfeit coin by its letter and tell whether it is heavy or light. The solution will always be uniquely determined. 

Sample Input

1
ABCD EFGH even
ABCI EFJK up
ABIJ EFGH even

Sample Output

K is the counterfeit coin and it is light.

HINT

一开始想的死复杂,后来同学跟我说只要assume一个字母为假 , 并分别assume它为正或负,枚举即可。

想想也是 ,才12个。orz

 #include<stdio.h>
#include<string.h>
int T ;
bool a[] ;
char b[] , A ;
bool flag , blog; struct st
{
char l[] , r[] ;
char jud[] ;
}e[]; void solve (int k , int l , int r)
{
if (l == r ) {
if (strcmp (e[k].jud , "even") == ) {
return ;
}
}
else if (l > r) {
if (strcmp (e[k].jud , "up") == ) {
return ;
}
}
else if (l < r) {
if (strcmp (e[k].jud , "down") == ) {
return ;
}
}
blog = ;
} int main ()
{
// freopen ("a.txt" , "r" , stdin ) ;
scanf ("%d" , &T ) ;
while (T--) {
for (int i = ; i <= ; i++) {
scanf ("%s" , e[i].l) ;// puts (e[i].l) ;
scanf ("%s" , e[i].r) ;// puts (e[i].r) ;
scanf ("%s" , e[i].jud) ;// puts (e[i].jud) ;
}
flag = ;
for (int i = ; i < && !flag ; i++) {
for (int j = ; j < ; j++) {//假的比较轻
a[j] = ;
}
a[i] = ;
blog = ;
for (int k = ; k <= ; k++) {
int l = , r = ;
for (int s = ; e[k].l[s] != '\0' ; s ++ ) {
l += a[e[k].l[s] - 'A'] ;
}
for (int s = ; e[k].r[s] != '\0' ; s ++ ) {
r += a[e[k].r[s] - 'A'] ;
}
solve (k , l , r) ;
if (!blog)
break ;
}
if (blog) {
flag = ;
A = 'A' + i ;
strcpy (b , "light") ;
}
}
if (!flag)
for (int i = ; i < && !flag ; i++) {
for (int j = ; j < ; j++) {//假的比较重
a[j] = ;
}
a[i] = ;
blog = ;
for (int k = ; k <= ; k++) {
int l = , r = ;
for (int s = ; e[k].l[s] != '\0' ; s ++ ) {
l += a[e[k].l[s] - 'A'] ;
}
for (int s = ; e[k].r[s] != '\0' ; s ++ ) {
r += a[e[k].r[s] - 'A'] ;
}
solve (k , l , r) ;
if (!blog)
break ;
}
if (blog) {
flag = ;
A = 'A' + i ;
strcpy (b , "heavy" ) ;
}
}
printf ("%c is the counterfeit coin and it is %s.\n" , A , b ) ;
}
return ;
}

poj1013.Counterfeit Dollar(枚举)的更多相关文章

  1. POJ1013 Counterfeit Dollar

    题目来源:http://poj.org/problem?id=1013 题目大意:有12枚硬币,其中有一枚假币.所有钱币的外表都一样,所有真币的重量都一样,假币的重量与真币不同,但我们不知道假币的重量 ...

  2. POJ 1013 Counterfeit Dollar

    Counterfeit Dollar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36206   Accepted: 11 ...

  3. Poj 1013 Counterfeit Dollar / OpenJudge 1013(2692) 假币问题

    1.链接地址: http://poj.org/problem?id=1013 http://bailian.openjudge.cn/practice/2692 http://bailian.open ...

  4. POJ 1013:Counterfeit Dollar

    Counterfeit Dollar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42028   Accepted: 13 ...

  5. Counterfeit Dollar -----判断12枚钱币中的一个假币

     Counterfeit Dollar Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u ...

  6. Counterfeit Dollar 分类: POJ 2015-06-12 15:28 19人阅读 评论(0) 收藏

    Counterfeit Dollar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 41559   Accepted: 13 ...

  7. 【poj1013】 Counterfeit Dollar

    http://poj.org/problem?id=1013 (题目链接) 题意 12个硬币中有1个是假的,给出3次称重结果,判断哪个硬币是假币,并且判断假币是比真币中还是比真币轻. Solution ...

  8. POJ 1013 Counterfeit Dollar 集合上的位运算

    Description Sally Jones has a dozen Voyageur silver dollars. However, only eleven of the coins are t ...

  9. D - Counterfeit Dollar(第二季水)

    Description Sally Jones has a dozen Voyageur silver dollars. However, only eleven of the coins are t ...

随机推荐

  1. Java中的String、StringBuffer以及StringBuilder的用法和区别

    String String的构造方式有n种(据说n==11),常见的例举一二: String s1 = "hello world"; String s2 = new String( ...

  2. 浅谈JS面向对象之创建对象

    hello,everybody,今天要探讨的问题是JS面向对象,其实面向对象呢呢,一般是在大型项目上会采用,不过了解它对我们理解JS语言有很大的意义. 首先什么是面向对象编程(oop),就是用对象的思 ...

  3. 【微收藏】来自Twitter的自动文字补齐jQuery插件 - Typeahead.js

    没图没逼格 事发有因 该插件可以结合本地数据进行一些操作.推荐关注一下H5的几种数据存储的方式(localstorage与sessionstorage.IndexedDB.离线缓存manifest文件 ...

  4. Unity Networking API文档翻译(二):The High Level API

    高级API (HLAPI) 是用来提供给Unity 创建多人在线游戏的组件.它是在底层传输层的基础上构建的, 对多人在线游戏提供了很多通用的功能.当传输层支持各种网络拓扑结构的时候,HLAPI是一个功 ...

  5. [BZOJ1801][AHOI2009]中国象棋(递推)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1801 分析: 只会50的状态压缩…… 然后搜了下题解,发现是dp 首先易得每行每列至多 ...

  6. JS事件学习笔记(思维导图)

    导图

  7. RequireJS学习资料汇总

    入门系列 [1]阮一峰 RequireJS用法 [2]RequireJS入门指南 文档系列 [1]RequireJS中文文档 [2]RequireJS英文文档 代码实践 知识扩展 [1]计算机干了什么

  8. Graphics samples

    绘制二次曲线: public void paint(Graphics g) { // TODO 自动生成的方法存根 super.paint(g); Graphics2D g2=(Graphics2D) ...

  9. oracle 分区表

    分区表用途 分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明.Oracle的分区表可以包括多个分区,每个分区都是一个独立的段(SEGMENT),可以存放到不同的表空间 ...

  10. Docker-2 的创建、启动、终止、删除、迁移等

    学习博客地址:http://www.dwhd.org/20151115_140935.html