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. 【ELK Stack】ELK+KafKa开发集群环境搭建

    部署视图 运行环境 CentOS 6.7 x64 (2核4G,硬盘100G) 需要的安装包 Runtime jdk1.8 : jdk-8u91-linux-x64.gz (http://www.ora ...

  2. overlay-scrollbar-js

    function doAccept() { var div = $('#shadowbox .legal-gate-cont') var con = $('#shadowbox .html') var ...

  3. nginx 的中文配置详细解释

    文章转自:http://www.ha97.com/5194.html 更详细的模块参数请参考:http://wiki.nginx.org/Main #定义Nginx运行的用户和用户组 user www ...

  4. Java设计模式-工厂方法模式(Factory Method)

    工厂方法模式(Factory Method) 工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建.在以下的三种模式中,第一种如果传入的字符串有误,不能正确创 ...

  5. Hibernate-缓存-并发策略

    当多个并发的事务同时访问持久化层的缓存中的相同数据时,会引起并发问题,必须采用必要的事务隔离措施. 在进程范围或集群范围的缓存,即第二级缓存,会出现并发问题.因此可以设定以下4种类型的并发访问策略,每 ...

  6. BZOJ2654 tree

    Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...

  7. asp.net input怎么获取值

    前台: <input type="hidden" name="content" value="content"> 后台: Req ...

  8. GCC、Makefile编程学习

    相关学习资料 http://gcc.gnu.org/ https://gcc.gnu.org/onlinedocs/ http://zh.wikipedia.org/zh/GCC http://blo ...

  9. javax/faces/webapp/FacesServlet

    严重: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component ...

  10. JSP业务逻辑层

    经典的三层架构:表示层.业务逻辑层和数据访问层 具体的区分方法 1:数据访问层:主要看你的数据层里面有没有包含逻辑处理,实际上他的各个函数主要完成各个对数据文件的操作.而不必管其他操作. 2:业务逻辑 ...