[原创]我的PKU ACM POJ1029题解

[原创]我的PKU ACM POJ1029题解

这题和POJ1013几乎相同,碰到了也厚颜无耻的再做了一遍来充数。^_^

Source Code

Problem: 1029
User: absolute
Memory: 212K
Time: 16MS
Language: C++
Result: Accepted
  • Source Code
#include <stdio.h>
int main()
{
int N,K,i,j;
bool real[1000]={0};
int heavy[1000]={0},light[1000]={0};
scanf("%d %d",&N,&K);
for(i=0;i<K;i++)
{
int pancoins,leftcoins[500],rightcoins[500];
char result;
scanf("%d",&pancoins);
for(j=0;j<pancoins;j++)
{
scanf("%d",leftcoins+j);
}
for(j=0;j<pancoins;j++)
{
scanf("%d",rightcoins+j);
}
getchar();
scanf("%c",&result);
getchar();
//平衡则放入真数组,表示这次称的都是真币
if(result=='=')
{
for(j=0;j<pancoins;j++)
{
real[leftcoins[j]-1]=true;
real[rightcoins[j]-1]=true;
}
}
//右边下降,左边怀疑为轻,右边为重
else if(result=='<')
{
for(j=0;j<pancoins;j++)
{
light[leftcoins[j]-1]++;
heavy[rightcoins[j]-1]++;
}
}
//左边怀疑为重,右边怀疑为轻
else if(result=='>')
{
for(j=0;j<pancoins;j++)
{
heavy[leftcoins[j]-1]++;
light[rightcoins[j]-1]++;
}
}

}
bool sure=true;
int falsecoin=0,unreal;
int times=0;
int realnums=0;
//假币必然是不在真数组中,而且它必然只能在重数组和轻数组之一出现,而不能同时出现
//但是有可能被怀疑的只称过一次,所以必须选出被怀疑最多次的那个
//如果有两个以上相同最多次的则无法确定
for(j=0;j<N;j++)
{
if(real[j]==true)
{
realnums++;
continue;
}
unreal = j+1;
if(light[j]>0&&heavy[j]==0)
{
if(light[j]==times)
sure = false;
else if(light[j]>times)
{
falsecoin = j+1;
sure = true;
times = light[j];
}
}
else if(light[j]==0&&heavy[j]>0)
{
if(heavy[j]==times)
sure = false;
else if(heavy[j]>times)
{
falsecoin = j+1;
sure = true;
times = heavy[j];
}
}
}
//只有一个没有称的是假币
if(realnums==N-1)
{
falsecoin = unreal;
}
if(sure)
printf("%d\n",falsecoin);
else
printf("0\n");
return 0;
}

转载于:https://www.cnblogs.com/absolute8511/archive/2009/05/03/1649588.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值