http://poj.org/problem?id=1029

题目大意:“金条”银行从可靠的消息来源得知,在他们最后一组N个硬币中,一枚硬币是假的,与其他硬币的重量不同(其他硬币的重量相等)。在经济危机之后,他们只有一个简单的平衡。使用这种平衡,我们可以确定左边的物体的重量是否小于,大于或等于右边的物体的重量。为了检测假币,银行职员将所有的硬币从1到N进行编号,从而将每个硬币分配给一个唯一的整数标识符。之后,他们开始在左边的平底锅和右边的平底锅里放置等量的硬币,以使各种硬币的数量增加。仔细记录了硬币的标识符和权重的结果。您将编写一个程序,该程序将帮助银行职员使用这些权重的结果来确定假硬币的标识符。输入文件的第一行包含两个整数N和K,由空格分隔,其中N为硬币数量(2<=N<=1000), K为满足的权重数(1<=K<=100)。下面的2K行描述了所有的权重。第一个数字是Pi (1<=Pi<=N/2),表示放置在左边和右边的硬币中硬币的数量,然后是放置在左边盘子里的硬币的Pi标识符和放置在右边盘子里的硬币的Pi标识符。所有的数字都用空格隔开。第二行包含以下字符之一:'<'、'>'或'='。它表示权重的结果:

“<”是指左边的硬币的重量小于右边的硬币的重量,

>的意思是,左边的硬币的重量比右边的硬币的重量要大,

“=”意思是左边的硬币的重量等于右边的硬币的重量。

在输出文件中写入错误硬币的标识符,如果它不能被给定权重的结果发现,则输出0。

也就是说N个硬币,有一个假硬币,现在给出了K次测量的结果,每一次的前K个标号的硬币表示放在左侧,后K个标号的硬币表示放在右侧,并且给出了测量结果。如果是等号,表示本次测量的所有硬币都是真的,如果出现了不等号,那么假硬币一定在本次测量的硬币中。但是这个假硬币可以是轻一点的,也可能是重一点的,这不确定。

算法思想:设coin[i]表示第i个硬币的真假,全部初始化为false。首先,如果有称出是相等的,那么两边的硬币肯定都是真币 coin[i]设为true( 两边硬币一样多,N个里只有一个是假币,所以平衡了两边肯定都是真币)。然后把每次不等的情况先记录下来,由于不知道假硬币是比真硬币轻还是重,我们可以分为轻的一端的硬币,和重的一端的硬币,分别对应的qCoin[i]++,wCoin[i]++,最后找到coin[i]为false并且对应的qCoin[i]或者是wCoin[i]等于不等号出现的次数nEqual的硬币,该硬币就是假硬币。最后判断是否只找到了一个假硬币,找到,输出编号,否则输出0。

 #include<iostream>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
bool*coin=new bool[n+];
int *qCoin=new int[n+];
int *wCoin=new int[n+];
for (int i = ; i < n+; i++)
{
coin[i]=false;
qCoin[i]=;
wCoin[i]=;
}
int comareCoinNum,nEqual=;
for (int i = ; i < k; i++)
{
cin>>comareCoinNum;
int *temp=new int[*comareCoinNum];
for (int i = ; i < *comareCoinNum; i++)
{
cin>>temp[i];
}
char c;
cin>>c;
if(c=='=')
{
for (int i = ; i < *comareCoinNum; i++)
coin[temp[i]]=true;
}
else if(c=='<')
{
for (int i = ; i < comareCoinNum; i++)
qCoin[temp[i]]++;
for (int i = comareCoinNum; i < *comareCoinNum; i++)
wCoin[temp[i]]++;
nEqual++;
}
else
{
for (int i = ; i < comareCoinNum; i++)
wCoin[temp[i]]++;
for (int i = comareCoinNum; i < *comareCoinNum; i++)
qCoin[temp[i]]++;
nEqual++;
}
}
int fCoin=,t;
for (int i = ; i < n+; i++)
{
if((coin[i]==false) && (nEqual==qCoin[i]||nEqual==wCoin[i]))
{
fCoin++;
t=i;
}
}
if(fCoin==)
cout<<t<<endl;
else
cout<<<<endl;
return ;
}

poj1029 False coin的更多相关文章

  1. POJ 1029 False coin

    http://poj.org/problem?id=1029 题意: 在一堆硬币中有一个假硬币,重量是重是轻不知道.每次称量多个硬币,并给出称量结果.判断依据题目给出的几次称量结果能否找出假硬币. 思 ...

  2. POJ题目排序的Java程序

    POJ 排序的思想就是根据选取范围的题目的totalSubmittedNumber和totalAcceptedNumber计算一个avgAcceptRate. 每一道题都有一个value,value ...

  3. 别人整理的DP大全(转)

    动态规划 动态规划 容易: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...

  4. dp题目列表

    此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 11 ...

  5. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  6. Poj 1029 分类: Translation Mode 2014-04-04 10:18 112人阅读 评论(0) 收藏

    False coin Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16418   Accepted: 4583 Descr ...

  7. poj 动态规划题目列表及总结

    此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 11 ...

  8. [转] POJ DP问题

    列表一:经典题目题号:容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 13 ...

  9. poj动态规划列表

    [1]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 13 ...

随机推荐

  1. Selenium+python入门

    在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供 ActionChains 类提供了鼠标操作的常用方法: perform(): 执行所有 ActionCh ...

  2. Rest架构风格的实践(使用通用Mapper技术)

    1.根据用户 id 查询用户数据 1.1 controll控制器 @RequestMapping("restful/user") @Controller public class ...

  3. 2018.11.06 洛谷P1099 树网的核(最短路+枚举)

    传送门 之前看李煜东的书一直感觉是道神题. 然后发现这题数据范围只有300?300?300? 直接上floydfloydfloyd然后暴力就完了啊. 代码: #include<bits/stdc ...

  4. c语言const和c++const

    1.常量 常量是指值不能被改变的量,又叫做字面值 1.1常量分类 1)字符常量:'a', 'A', '*'. 2)字符串常量:"helloworld","ilovechi ...

  5. HDU 4310 Hero (贪心)

    题意:给定你有 n 个敌人,你的伤害是 1,给出每个敌人的伤害,和敌人的血量,每一回合你可以攻击一个敌人,并且所有敌人都会攻击你,除非它已经死了,问你最少要多少要消耗多少血量. 析:一个很明显的贪心问 ...

  6. mysql 存储过程 有数据修改 没数据插入

    BEGIN DECLARE sid INT(10) DEFAULT 0; DECLARE money INT(10) DEFAULT 0; DECLARE row_count INT; DECLARE ...

  7. ROM的一种写法

    module mr_rom_pll_valuemask_8bpc #( , , , , // 6*7 // alt_clogb2(42) ) ( input wire clock, :] addr_p ...

  8. Iframe跨域JavaScript自动适应高度

    重点分析: 主域名页面:页面A,页面C 其它域名页面:页面B 步骤: 1.页面A(主域名)通过Iframe(id="iframeB")嵌套页面B(其它域名) 2.页面B(其它域名) ...

  9. Java交流分享(522818473)

    今天来分享哈自己的技术交流群,记得还是刚接触Java建立的群,那时候学习Java很有动力,经常和群友谈论问题,现在都专注公司业务和技术这一块,很多后端框架都没用除了restful,其他都是封装的,不过 ...

  10. poj 2299 Ultra-QuickSort(归并排序,树状数组,线段树)

    Description In this problem, you have to analyze a particular sorting algorithm. The algorithm proce ...