poj1323

转载请注明出处:http://blog.csdn.net/u010734277


问题概述:假设m个人在玩一个纸牌游戏,其中包括你。在最开始的时候,每个人抽n张牌,每张牌的点数是从1到m*n的不同的整数。在每一轮,每个玩家选择一张牌去跟其他人比较,点数最大的人赢得游戏。n轮结束以后,赢得次数最多的人赢得游戏。

输入输出再次不赘述。

先说下思路。

赢得场数最多为n场(手中拿的牌的数量)

把手里的排跟手里没有的牌从小到大进行比较。比如样例中的1 2 7 9 10 。先将1与3比较,1比三小,然后将2与四比较,2比四小。再将7与5比较,7比5大,那么继续将7与8比较,7比8小;9和10没有比较的,就是剩下两个,那么至少能胜的场数就是2场。所以主要的任务就是知道剩余的张数。

代码:

#include<iostream>
using namespace std;
int main(){
int m,n;
int a[2000];
int b[2000];
int times=1;
while(cin>>m>>n){
if(m==0&&n==0)break;
for(int i=1;i<=n;++i){
cin>>a[i];
}
for(int i=1;i<=n;++i){
for(int t=i+1;t<=n;++t){
if(a[i]>a[t]){
int p=a[i];
a[i]=a[t];
a[t]=p;
}
}
}
int t=1;
int s=2;
for(int i=a[1]+1;i<=m*n;++i){
if(i!=a[s]){
b[t]=i;
++t;
}
if(i==a[s])++s;
}
int x=1;
for(s=1;s<t;){

if(x>n)break;
if(a[x]<b[s]){
x++;s++;
}
else if(a[x]>b[s]){
s++;
}
}
cout<<endl;                                                   //删掉
if(n-x+1<0)cout<<"Case "<<times<<": "<<0<<endl;
else cout<<"Case "<<times<<": "<<n-x+1<<endl;
times++;
cout<<endl;                                             //删掉
}
return 0;
}


注意输出中不能有这两个空行,这就是我原来一直presentation error的原因……

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值