时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 256MB,其他语言 512MB
难度:简单
出题人:root
描述
在田忌赛马的故事中,孙膑用自己的下等马对战对手的上等马,自己上等马对阵对手的中等马,自己的中等马对阵对手的下等马,从而赢得了胜利。现在即将进行的是N匹马的赛马比赛。双方队伍的马各分为N等。已知只有当我方马的等级比对方马等级高X等以上(包含X)时,我方才可以取得这场比赛的胜利。如果在N场比赛中我方的胜场数大于对方,则我方取得最终的胜利。现在已知对方这N场比赛的出战方案,请计算所有令我方最终获胜的出战方案。
输入描述
第一行两个整数,N和X。N≤9, 0 ≤ X < N。 第二行N个正整数,A(1)…A(N)。A(i)表示第i场比赛对方马的等级,1≤i≤N。等级越高越强。
输出描述
按字典序输出所有我方最终获胜的方案,每个方案一行。每行是N个正整数,第i个数表示我方第i场比赛马的等级。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool MaxToMin(const int& a ,const int& b);
int main()
{
int n,n1,n2;
int i,j,k;
int speed;
int WinTimes,LoseTimes,money;
vector<int> TianHorse;
vector<int> KingHorse;
while(cin>>n)
{
if(0==n)
break;
money=WinTimes=LoseTimes=0;
n1=n2=n-1;
TianHorse.clear();
KingHorse.clear();
for(i=0;i<n;i++)
{
cin>>speed;
TianHorse.push_back(speed);
}
for(i=0;i<n;i++)
{
cin>>speed;
KingHorse.push_back(speed);
}
sort(TianHorse.begin(),TianHorse.end(),MaxToMin);
sort(KingHorse.begin(),KingHorse.end(),MaxToMin);
i=j=0;
for(k=0;k<n;k++)
{
if(TianHorse[n1]>KingHorse[n2])
{
n1--;
n2--;
WinTimes++;
}
else if(TianHorse[n1]<KingHorse[n2])
{
LoseTimes++;
n1--;
j++;
}
else
{
if(TianHorse[i]>KingHorse[j])
{
WinTimes++;
i++;
j++;
}
else if(TianHorse[n1]<KingHorse[j])
{
LoseTimes++;
n1--;
j++;
}
else
break;
}
}
money=(WinTimes-LoseTimes)*200;
cout<<money<<endl;
}
return 0;
}
bool MaxToMin(const int& a ,const int& b)
{
if (a>=b)
return true;
else
return false;
}