`

【ACM】杭电 hdu 1482 Counterfeit Dollar

    博客分类:
  • ACM
阅读更多

 

/* 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 ;
}

 

0
0
分享到:
评论

相关推荐

    杭电HDU ACM培训课件

    《杭电HDU ACM培训课件》是一份珍贵的学习资源,源自杭州电子科技大学的ACM竞赛培训课程。这些课件是官方论坛上分享的,旨在为那些积分不足无法获取资源或者对ACM编程竞赛感兴趣的初学者提供帮助。下面将详细阐述这...

    hdu_ACM.rar_ACM_hdu_hdu acm_hdu_ACM_杭电ACM

    杭电hdu acm资料所用杭电的acm题

    杭电HDU ACM 1005

    杭电ACM1005题源代码,AC了的程序,无问题……

    杭电ACMhdu1163

    【标题】:杭电ACMhdu1163 【描述】:这是一道源自杭州电子科技大学(Hangzhou Dianzi University,简称HDU)的ACM编程竞赛题目,编号为1163。这类问题通常需要参赛者利用计算机编程解决数学、逻辑或算法上的挑战,...

    acm杭电,浙大代码

    【标题】"acm杭电,浙大代码" 指的是一个与ACM(国际大学生程序设计竞赛)相关的资源集合,特别关注于杭州电子科技大学(HDU)和浙江大学(Zhejiang University, ZOJ)的编程题目。在ACM竞赛中,参赛者需要编写高效...

    acm 杭电 2386-2393

    【标题】:“ACM 杭电 2386-2393”是指杭州电子科技大学在ACM(国际大学生程序设计竞赛)中所出的编号为2386到2393的一系列编程题目。 【描述】:“ACM 杭电 杭州电子科技大学 2386-2393 解题报告”指的是浙江工业...

    ACM杭电入门PPT

    **ACM(国际大学生程序设计竞赛)杭电入门PPT** 在编程竞赛的世界里,ACM(International Collegiate Programming Contest)是一项备受瞩目的比赛,它旨在挑战大学生的算法设计、问题解决和编程技能。这份“ACM杭电...

    ACM HDU题目分类

    ACM HDU 题目分类 ACM HDU 题目分类是指对 HDU 在线判题系统中题目的分类,总结了大约十来个分类。这些分类将有助于编程选手更好地理解和解决问题。 DP 问题 DP(Dynamic Programming,动态规划)是一种非常重要...

    hdu_acm_1084.rar_ACM_HDU10_acm10_hdu_hdu 1084

    【标题】"hdu_acm_1084.rar_ACM_HDU10_acm10_hdu_hdu 1084" 提供的是一个关于杭电(HDU)ACM竞赛第1084题的解决方案。该题目可能是在编程竞赛中常见的算法问题,而ACM(国际大学生程序设计竞赛)是全球知名的编程...

    hdu.zip_ACM_hdu

    在ACM(国际大学生程序设计竞赛)中,数据结构与算法是至关重要的组成部分,而"杭电"(杭州电子科技大学)的在线判题系统HDU提供了许多这类问题供参赛者练习。"hdu.zip_ACM_hdu"这个压缩包很可能是包含了一道或若干道...

    ACM杭电入门训练题

    ### ACM杭电入门训练题概览与解析 #### 核心知识点:算法竞赛与编程挑战 ACM(Association for Computing Machinery)是国际计算机协会的缩写,而ACM编程竞赛则是全球范围内广受大学生欢迎的一种计算机编程比赛...

    acm杭电入门课件+博弈论文+背包九讲

    【标题】"acm杭电入门课件+博弈论文+背包九讲"涵盖了多个与算法竞赛、计算机科学基础以及优化问题解决相关的知识点。ACM,全称是国际大学生程序设计竞赛(International Collegiate Programming Contest),是一项...

    ACM杭电1002 C++程序

    标题 "ACM杭电1002 C++程序" 指向的是一个与ACM国际大学生程序设计竞赛相关的题目,具体是杭州电子科技大学(Hangzhou Dianzi University)在线评测系统上的第1002号问题。这个问题要求用C++编程语言来解决大数相加...

    ACM HDU 2000-2099 解题报告 杭电 ACM

    《ACM HDU 2000-2099 解题报告 杭电 ACM》是一份详尽的编程竞赛解题集,主要涵盖了杭电(Hangzhou Dianzi University)在线判题系统(HDU OJ)上的2000至2099号题目。这份解题报告是针对参与ACM/ICPC(国际大学生...

    ACM杭电一百题及答案

    美国计算机协会(Association for Computing Machinery , 简称ACM)是一个世界性的计算机从业员专业组织,创立于1947年,是世界上第一个科学性及教育性计算机学会。ACM每年都出版大量计算机科学的专门期刊,并就每项...

    acm 杭电课件之动态规划

    acm的经典算法之动态规划,杭电课件,很好的

    100道 acm C语言 hdu 解题报告

    100道 acm C语言 hdu 解题报告

    ACM杭电课件

    【ACM杭电课件】是一系列专门为对算法竞赛(ACM,即国际大学生程序设计竞赛)感兴趣的同学们准备的学习资源。这些课件旨在提供深入的理论知识和实践技巧,帮助学员提升编程技能,掌握解决复杂问题的能力。在ACM竞赛...

    ACM-HDU涉及了很多算法

    在ACM(国际大学生程序设计竞赛)中,HDU(杭州电子科技大学)的在线判题系统是许多参赛者磨炼算法技巧的重要平台。这个平台涵盖了众多的算法问题,旨在提升参赛者的编程能力和逻辑思维能力。以下是对标题和描述中...

Global site tag (gtag.js) - Google Analytics