题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2162
The Android University ACM Team Selection Contest
简单模拟!!!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
char str[35];
int id,a,t,p,flag;
}no[10010];
int cmp1(node a,node b)
{
if(a.t==b.t)
return a.p<b.p;
else
return a.t>b.t;
}
bool cmp2(node a,node b)
{
return a.id<b.id;
}
int main()
{
int T,t=1;
scanf("%d",&T);
while(T--)
{
int i,j=-1,n,m,flag=0,sum=0;
scanf("%d%d",&n,&m);
memset(no,0,sizeof(no));
for(i=0;i<n;i++)
{
cin>>no[i].str>>no[i].a>>no[i].t>>no[i].p;
no[i].id=i;
}
printf("Case %d:\n",t++);
sort(no,no+n,cmp1);
if(n<m)
m=n;
for(i=0;i<m;i++)
no[i].flag=1;
for(i=0;i<m;i++)
{
if(no[i].a)
{
flag=1; //看前m个是否有女生队,1代表有
break;
}
}
if(!flag)
{
for(i=m;i<n;i++)
if(no[i].a)
{
if(no[i].t)
j=i; //把最优秀的女生选出来
break;
}
}
sort(no,no+m,cmp2);
for(i=0;i<n;i++)
{
if(no[i].flag==1&&no[i].t)
{
cout<<no[i].str<<endl;
sum++;
}
}
for(;sum<m;sum++)
cout<<m<<endl;
if(j!=-1)
cout<<no[j].str<<endl;
if(T)
cout<<endl;
}
return 0;
}