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 }

posted @ 2011-12-28 19:13  笑巧  阅读(239)  评论(0编辑  收藏  举报