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

来源:互联网 发布:淘宝仿网红家衣服质量 编辑:程序博客网 时间:2024/06/04 18:17

简单题,

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

#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;}


0 0