【ACM】杭电 hdu 1482 Counterfeit Dollar
2012-01-22 15:34
253 查看
/* THE PROGRAM IS MADE BY PYY */ /*----------------------------------------------------------------------------// Copyright (c) 2011 panyanyany All rights reserved. URL : http://acm.hdu.edu.cn/showproblem.php?pid=1482 Name : 1482 Counterfeit Dollar Date : Sunday, January 22, 2012 Time Stage : 2 hours Result: 5285719 2012-01-22 11:47:15 Accepted 1482 0MS 236K 2462 B C++ pyy Test Data : Review : 不是什么难题,慢慢推敲一下就出来了。 首先,基本原理是,把全部倾斜的天平摆成一个方向,设为左低右高, 那么假币肯定在任意一边。设它在左边,则左边3组中必然都存在假币, 所以只要枚举左边所有倾斜组,得到共有的那个硬币,便是假币。如果左边 找不到所有组共有的硬币,则在右边找。 如果遇到平衡的天平,那么此天平两边的硬币都是真币,就可以在枚举的时候过滤 掉这些真币了,同时也要减少枚举的组数。比如示例中,有两组真币,那么只枚举 一组就行了。 //----------------------------------------------------------------------------*/ #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <string> using namespace std ; #define INF (-1) #define MAXN ('L'-'A'+2) int evenCnt ; int getsum (bool side[MAXN][3], bool even[MAXN]) { int i, j, sum ; for (i = 0 ; i < 12 ; ++i) { sum = 0 ; if (even[i]) // 不枚举真币 continue ; for (j = 0 ; j < 3 ; ++j) sum += side[i][j] ; if (sum == 3 - evenCnt) // 只枚举倾斜的天平 break ; } return i ; } int main () { int i, j ; int tcase, k, id ; string a, b, c, lf, rh ; char *pWei ; bool even[MAXN], left[MAXN][3], right[MAXN][3] ; while (scanf ("%d", &tcase) != EOF) { k = 0 ; while (k++ < tcase) { MEM (even, 0) ; MEM (left, 0) ; MEM (right, 0) ; evenCnt = 0 ; for (i = 0 ; i < 3 ; ++i) { cin >> a >> b >> c ; if (c[0] == 'e') // 记录真币 { ++evenCnt ; for (j = 0 ; j < a.size() ; ++j) { even[a[j]-'A'] = true ; } for (j = 0 ; j < b.size() ; ++j) { even[b[j]-'A'] = true ; } continue ; } else if (c[0] == 'u') lf = a, rh = b ; else lf = b, rh = a ; for (j = 0 ; j < lf.size() ; ++j) left[lf[j]-'A'][i] = true ; for (j = 0 ; j < rh.size() ; ++j) right[rh[j]-'A'][i] = true ; } id = getsum (left, even) ; pWei = "heavy" ; if (id == 12) { id = getsum (right, even) ; pWei = "light" ; } printf ("%c is the counterfeit coin and it is %s.\n", id+'A', pWei) ; } } return 0 ; }
相关文章推荐
- 背包问题小总结 习题(动态规划01背包(第k优解)完全背包,多重背包)acm杭电HDU2639,HDU2602,HDU1114,HDU2191
- 杭电ACM-HDU 1982
- 杭电(hdu)ACM 2034 人见人爱A-B
- ACM 杭电hdu 2602 Bone Collector(01背包)
- 杭电ACM--HDU-1061
- 杭电(HDU)acm题目的分类
- 杭电(hdu)ACM 2503 a/b + c/d
- 杭电(hdu)ACM 1231 最大连续子序列
- JAVA(HDU)杭电ACM 1421
- 杭电ACM--HDU1020Encoding
- ACM刷题之HDU————献给杭电五十周年校庆的礼物
- 杭电ACM--HDU-2020绝对值排序
- 杭电(hdu)ACM 1166 敌兵布阵
- JAVA(HDU)杭电ACM 1421
- 杭电acm1008 hdu-acm-1008解题报告
- 杭电 HDU ACM Transportation (哈理工练习赛 费用流拆边)
- 杭电acm1021 hdu-acm-1021解题报告
- 杭电 HDU 4282 A very hard mathematic problem 2012 ACM/ICPC 天津网赛
- 杭电ACM--HDU-1425
- <编程珠玑>3.4 日期问题 && 杭电hdu acm 2133题目代码