您的位置:首页 > 移动开发 > Android开发

山东省第二届ACM省赛 The Android University ACM Team Selection Contest

2017-04-27 20:39 267 查看
简单题,

一个排序,然后记住是否应输出

#include <iostream>
#include <cmath>
#include <string.h>
#include <stdio.h>
#include <algorithm>
using namespace std;
struct node
{
char s[40];
int sex,t,p,i;
}a[10009],b[10009];
bool v[10009];
bool cmp(node a,node b)
{
if(a.t==b.t)return a.p<b.p;
else return a.t>b.t;
}
int main ()
{
int t,cnt=0;
scanf("%d",&t);
while(t--)
{
memset(v,0,sizeof(v));
int n,m;
scanf("%d%d%*c",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%s%d%d%d%*c",a[i].s,&a[i].sex,&a[i].t,&a[i].p);
a[i].i=b[i].i=i;
strcpy(b[i].s,a[i].s);
b[i].sex=a[i].sex;
b[i].t=a[i].t;
b[i].p=a[i].p;
}
printf("Case %d:\n",++cnt);
if(n<=m)
{
for(int i=0;i<n;i++)
printf("%s\n",a[i].s);
puts("");
continue;
}
sort(b,b+n,cmp);
int flag=0;
for(int i=0;i<m;i++)
{
v[b[i].i]=1;
if(b[i].sex!=0)flag=1;
}
if(flag==0)
for(int i=m;i<n;i++)
{
if(b[i].sex!=0)
{
if(b[i].t>0)v[b[i].i]=1;
break;
}
}
for(int i=0;i<n;i++)
if(v[i]==1) printf("%s\n",a[i].s);
puts("");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: