poj 1029 False coin

poj 1029 False coin,第1张

poj 1029 False coin
#include <iostream>#include <string>using namespace std;const int MAX = 1001;int n, k, p, total = 0;//total:不等式出现的次数,其他为计数的char sign;int t[MAX] = {0};//每次输入的数据,输入一组数据就处理一组int r[MAX] = {0};//确定为真的硬币int w[MAX] = {0};//记录可能为假硬币出现的次数//出现在大于那边的w[i]++,出现在小于那边的w[i]--,假硬币不可能又轻又重int main(){       int i;       cin >> n >> k;    while (k--)    {//输入        cin >> p;        for (i = 0; i < 2 * p; i++)        { cin >> t[i];        }        cin >> sign;//输入<,>,=        if (sign == '=')        {//标记肯定为真的硬币 for ( i = 0; i < 2 * p; i++) {     r[t[i]] = 1; }        }        else if (sign == '<')        { //左轻右重 total++; for ( i = 0; i < p; i++) {//p之前为不等号左边的     w[t[i]]--; } for ( i = p; i < 2 * p; i++) {//p开始为不等号右边的     w[t[i]]++; }        }        else if (sign == '>')        {//左重右轻 total++; for ( i = 0; i < p; i++) {//p之前为不等号左边的     w[t[i]]++; } for (i = p; i < 2 * p; i++) {//p开始为不等号右边的     w[t[i]]--; }        }    }//end while       //假币在不等式中每次都应该出现    int count = 0, pos = 0;    for (i = 1; i <= n; i++)    {        if (r[i]==1)        {//真的硬币忽过 continue;        }        if (w[i] == total || w[i] == 0 - total)        {//找每次都出现在不等式一边的"假币",比真重的情况或者比真轻的情况 count++; pos = i;        }    }    if (count != 1)    {//假币唯一则输出        cout << 0 << endl;    }    else    {        cout << pos << endl;    }    return 0;}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4924827.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存