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. TabControl中显示和隐藏TabPage页

    在使用TabControl控件时,希望隐藏其中某个选项卡(即TabPage).TabPage类明明提供了一个Hide方法,用在代码中却没有任何效果,甚是奇怪.无奈之余,只好考虑另辟途径 方法一: 设置 ...

  2. spring学习 十七 scope属性,单例多例

    Scope属性是<bean>中的属性,取值可以有, singleton 默认值, 单例, prototype 多例, 每次获取重新实例化, request 每次请求重新实例化, sessi ...

  3. 2017年多校get点

    杨辉三角形变形??? lucas定理

  4. Servet-------JSTL标签库

    JSTL标签库 也可以和EL表达式配合使用 作用:   提高在Jsp中的逻辑代码的编写效率,使用标签..(对EL表达式的扩展)   使用: JSTL的核心标签库(重点) JSTL的SQL标签库 JST ...

  5. mysql之多表查询和pymysql模块

    一 多表查找方法 1 交叉连接:不使用任何的判断条件,生成笛卡尔积.第一个表的行数乘以第二个表的行数就等于笛卡尔积结果集的行数. mysql> select * from student,cla ...

  6. 对SVC和SVR的理解

    首先: support vector classify(SVC)支持分类机做二分类的,找出分类面,解决分类问题 support vector regression(SCR)支持回归机做曲线拟合.函数回 ...

  7. vue +bootstrap 写的小例子

    最近vue挺火,最近也不是特别忙,就学习了下. vue和angular非常像都是MVVM.道理都是想通的,就是语法的差异 我觉得vue和angular区别: 1.vue更轻,更便捷,适用于移动开发 2 ...

  8. MFC连接MySQL数据库方法

    MFC连接数据库的三种方法: 1.ODBC(开放式数据互联) 2.OLEDB与ADO 3.用mysql为C语言提供的接口

  9. 学习fortran77基础语法

    Program ParamaterDefine Implicit None C FORTRAN变量名和关键字不区分大小写.但调用外部函数的话,需要在编译选项里指定 c 大小写等选项 因为链接器是区分大 ...

  10. vue动态路由

    我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件.例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染.能够提供参数的路由即为动态路由第一步:定义组件 c ...