POJ1323 ( 贪心)

算法分析: 

1. 将自已的牌a[]从大到小排,要求至少能胜多少round,其实是求最多输了多少轮,也就是求对手最多赢多少轮;

2. 将对手的牌b[]从大到小排,如果自已的牌a[i]>b[j],对手可以用手头上最小的牌比较,再进行下一轮,如果a[i]<b[j],则算对手胜一轮!

 

代码如下:

View Code
 1 #include<iostream>
 2 #include<algorithm>
 3  using  namespace std;
 4 
 5  bool cmp( int x, int y)
 6 {
 7      return x>y;
 8 }
 9 
10  int main()
11 {
12      int m,n,i,a[ 55],b[ 1005],p= 0;
13      while(cin>>m>>n)
14     {
15         p++;
16          if(m== 0&&n== 0)   break;
17          for(i= 0;i<n;i++)
18             cin>>a[i];
19         sort(a,a+n,cmp);
20          int j= 0,k= 0,lose= 0;
21          for(i=n*m;i> 0;i--)
22             if(i!=a[k]) 
23                b[j++]=i;
24             else k++;
25         j= 0;
26         k= 0;
27          for(i= 0;i<n;i++)
28              if(a[k]>b[j]) k++;
29              else 
30             {
31                 lose++;
32                 k++;
33                 j++;
34             }
35         cout<< " Case  "<<p<< " "<<n-lose<<endl;
36     }
37      return  0;
38 }

你可能感兴趣的:(poj)