• [原创]我的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;
      }

  • 相关阅读:
    The type or namespace name 'Windows' does not exist in the namespace....
    WCF 事件处理
    ASP.Net程序在IIS7的部署问题
    Oracle Package的全局变量与Session
    [ASP.NET]C1Webgrid中实现编辑和计算
    EXCEL妙用:选取单元格时改变整行的背景色
    [转]22 个精美的网站管理后台模板推荐
    [转]C#开发Active控件(二)
    Oracle获取时间差的技巧
    C#里的Random
  • 原文地址:https://www.cnblogs.com/absolute8511/p/1649588.html
Copyright © 2020-2023  润新知