poj1029

这一题和前面做的一道题几乎是一样的,只不过是有个地方犯傻了,唉,wa了好几次

说下思路,

如果是=,则把每个值都赋为2000(这个数一定要比比较的次数大啊,我刚开始开了100,wa了好几次,唉,你说这能不让人窝火吗)

如果是<,把左边的值不为2000的数减一,右边不为2000的数加1

如果是>,则反过来

最后查找不为2000的绝对值最大的数,则该数必为假币,至于是否会输出0这个结果,那就要看不为2000的绝对值最大的数知否只有一个,如果只有一个,那就是要求的结果,如果多个,那么就输出0

  1 #include <iostream>
  2 #include <stdlib.h>
  3 using namespace std;
  4 
  5 int flag[1005];
  6 int main()
  7 {
  8   int n,k;
  9   cin>>n>>k;
 10   int i,j,p;
 11 
 12   int left[1005];
 13   int right[1005];
 14   char c[3];
 15   for(i=0;i<k;i++)
 16   {
 17   cin>>p;
 18   for(j=0;j<p;j++)
 19   {
 20   cin>>left[j];
 21   }
 22   for(j=0;j<p;j++)
 23   {
 24   cin>>right[j];
 25   }
 26   cin>>c;
 27   if(c[0]=='=')
 28   {
 29   for(j=0;j<p;j++)
 30   {
 31   flag[left[j]]=2000;
 32   }
 33   for(j=0;j<p;j++)
 34   {
 35   flag[right[j]]=2000;
 36   }
 37 
 38   }
 39   if(c[0]=='>')
 40   {
 41   for(j=0;j<p;j++)
 42   {
 43   if(flag[left[j]]!=2000)
 44   {
 45   flag[left[j]]++;
 46   }
 47   }
 48   for(j=0;j<p;j++)
 49   {
 50   if(flag[right[j]]!=2000)
 51   {
 52   flag[right[j]]--;
 53   }
 54   }
 55   }
 56   if(c[0]=='<')
 57   {
 58   for(j=0;j<p;j++)
 59   {
 60   if(flag[left[j]]!=2000)
 61   {
 62   flag[left[j]]--;
 63   }
 64   }
 65   for(j=0;j<p;j++)
 66   {
 67   if(flag[right[j]]!=2000)
 68   {
 69   flag[right[j]]++;
 70   }
 71   }
 72   }
 73   }
 74   int max=-1;
 75   int ans;
 76   int mount=1;
 77   /*for(i=1;i<=n;i++)
 78   {
 79   cout<<flag[i]<<endl;
 80   }*/
 81   for(i=1;i<=n;i++)
 82   {
 83   if(flag[i]!=2000 && abs(flag[i])>=max)
 84   {
 85   if(abs(flag[i])>max)
 86   {
 87   max=abs(flag[i]);
 88   ans=i;
 89   mount=1;
 90   }
 91   else if(abs(flag[i])==max)
 92   {
 93   mount++;
 94   }
 95   }
 96 
 97   }
 98   if(mount==1) cout<<ans<<endl;
 99   else cout<<0<<endl;
100   //cout<<ans<<endl;
101   return 0;
102 }

转载于:https://www.cnblogs.com/devil-91/archive/2012/08/05/2624097.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值