/* 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 ;
}
分享到:
相关推荐
《杭电HDU ACM培训课件》是一份珍贵的学习资源,源自杭州电子科技大学的ACM竞赛培训课程。这些课件是官方论坛上分享的,旨在为那些积分不足无法获取资源或者对ACM编程竞赛感兴趣的初学者提供帮助。下面将详细阐述这...
杭电hdu acm资料所用杭电的acm题
杭电ACM1005题源代码,AC了的程序,无问题……
【标题】:杭电ACMhdu1163 【描述】:这是一道源自杭州电子科技大学(Hangzhou Dianzi University,简称HDU)的ACM编程竞赛题目,编号为1163。这类问题通常需要参赛者利用计算机编程解决数学、逻辑或算法上的挑战,...
【标题】"acm杭电,浙大代码" 指的是一个与ACM(国际大学生程序设计竞赛)相关的资源集合,特别关注于杭州电子科技大学(HDU)和浙江大学(Zhejiang University, ZOJ)的编程题目。在ACM竞赛中,参赛者需要编写高效...
【标题】:“ACM 杭电 2386-2393”是指杭州电子科技大学在ACM(国际大学生程序设计竞赛)中所出的编号为2386到2393的一系列编程题目。 【描述】:“ACM 杭电 杭州电子科技大学 2386-2393 解题报告”指的是浙江工业...
**ACM(国际大学生程序设计竞赛)杭电入门PPT** 在编程竞赛的世界里,ACM(International Collegiate Programming Contest)是一项备受瞩目的比赛,它旨在挑战大学生的算法设计、问题解决和编程技能。这份“ACM杭电...
ACM HDU 题目分类 ACM HDU 题目分类是指对 HDU 在线判题系统中题目的分类,总结了大约十来个分类。这些分类将有助于编程选手更好地理解和解决问题。 DP 问题 DP(Dynamic Programming,动态规划)是一种非常重要...
【标题】"hdu_acm_1084.rar_ACM_HDU10_acm10_hdu_hdu 1084" 提供的是一个关于杭电(HDU)ACM竞赛第1084题的解决方案。该题目可能是在编程竞赛中常见的算法问题,而ACM(国际大学生程序设计竞赛)是全球知名的编程...
在ACM(国际大学生程序设计竞赛)中,数据结构与算法是至关重要的组成部分,而"杭电"(杭州电子科技大学)的在线判题系统HDU提供了许多这类问题供参赛者练习。"hdu.zip_ACM_hdu"这个压缩包很可能是包含了一道或若干道...
### ACM杭电入门训练题概览与解析 #### 核心知识点:算法竞赛与编程挑战 ACM(Association for Computing Machinery)是国际计算机协会的缩写,而ACM编程竞赛则是全球范围内广受大学生欢迎的一种计算机编程比赛...
【标题】"acm杭电入门课件+博弈论文+背包九讲"涵盖了多个与算法竞赛、计算机科学基础以及优化问题解决相关的知识点。ACM,全称是国际大学生程序设计竞赛(International Collegiate Programming Contest),是一项...
标题 "ACM杭电1002 C++程序" 指向的是一个与ACM国际大学生程序设计竞赛相关的题目,具体是杭州电子科技大学(Hangzhou Dianzi University)在线评测系统上的第1002号问题。这个问题要求用C++编程语言来解决大数相加...
《ACM HDU 2000-2099 解题报告 杭电 ACM》是一份详尽的编程竞赛解题集,主要涵盖了杭电(Hangzhou Dianzi University)在线判题系统(HDU OJ)上的2000至2099号题目。这份解题报告是针对参与ACM/ICPC(国际大学生...
美国计算机协会(Association for Computing Machinery , 简称ACM)是一个世界性的计算机从业员专业组织,创立于1947年,是世界上第一个科学性及教育性计算机学会。ACM每年都出版大量计算机科学的专门期刊,并就每项...
acm的经典算法之动态规划,杭电课件,很好的
100道 acm C语言 hdu 解题报告
【ACM杭电课件】是一系列专门为对算法竞赛(ACM,即国际大学生程序设计竞赛)感兴趣的同学们准备的学习资源。这些课件旨在提供深入的理论知识和实践技巧,帮助学员提升编程技能,掌握解决复杂问题的能力。在ACM竞赛...
在ACM(国际大学生程序设计竞赛)中,HDU(杭州电子科技大学)的在线判题系统是许多参赛者磨炼算法技巧的重要平台。这个平台涵盖了众多的算法问题,旨在提升参赛者的编程能力和逻辑思维能力。以下是对标题和描述中...