现在的位置: 首页 > 综合 > 正文

poj 1323 Game Prediction

2012年11月13日 ⁄ 综合 ⁄ 共 839字 ⁄ 字号 评论关闭
//这一题根本上就不用考虑有多少个人来玩,只是考虑有两手牌就可以了,一组是给出的牌,一组是除了给出的牌之外,剩下的牌就可以
//将两手牌分别储存在两个数组中,然后从小排序,最后运用贪心就可以了! 
#include <iostream>
#include <memory.h>
#include <algorithm>
using namespace std;

int card1[1010], card2[1010], card3[1010];

int main()
{
    int m, n, i, j, k, q, c, tc = 0, ans, tmp;
    bool flag;
    while (cin >> m >> n && m && n)
    {
          memset(card1, 0, sizeof(card1));
          memset(card2, 0, sizeof(card2));
          memset(card3, 0, sizeof(card3));
          c = 0;
          tc++;
          flag = false;
          for (i = 1; i <= n; i++)
          {
              cin >> tmp;
              card2[tmp] = 1;
          }
          j = k = 1;
          for (i = 1; i <= n*m; i++)
          {
              if (card2[i] == 0)
              {
                 card1[j] = i;
                 j++;
              }
              if (card2[i] == 1)
              {
                  card3[k] = i;
                  k++;
              }
          }
          sort(card1, card1+j);
          sort(card3, card3+k);
          
          for (i = 1, q = 1; i < k; i++, q++)//这里进行贪心算法,从第二个数组中找出一个比第一个数组中大的一个数,
          //如果在第二个数组中可以找出一个比它大的数,就证明它输,否则赢(因为之前已经进行排序了,所以保证了数从小到大的排序,找到一个即可) 
          {
              if (flag) break;
              while (1)
              {
                    if (card1[q] > card3[i])
                    {
                       c++;
                       break;
                    }
                    else 
                        q++;
                    if (q >= j)
                    {
                        flag = true;
                        break;
                    }
              }
          }
          
          ans = n - c;
          cout << "Case " << tc << ": " << ans << endl;
    }
    
    system("pause");
}

【上篇】
【下篇】

抱歉!评论已关闭.