The Android University ACM Team Selection Contest
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
To be selected, one team has to solve at least one problem in the contest. The the top M teams who solved at least one problem are selected (If there are less than M teams solving at least one problem, they are all selected).
There is an bonus for the girls - if top M teams contains no all-girls teams,the highest ranked all-girls team is also selected (together with the M top teams), provided that they have solved at least one problem.
Recall that in an ACM/ICPC style contest, teams are ranked as following:
1. The more problems a team solves, the higher order it has.
2. If multiple teams have the same number of solved problems, a team with a smaller penalty value has a higher order than a team with a
larger penalty value.
Given the number of teams N, the number M defined above, and each team's name, number of solved problems, penalty value and whether it's an all-girls team, you are required to write a program to find out which teams are selected.
输入
Each test case begins with a line contains two integers, N (1 <= N <=10^4) and M (1 <= M <= N), separated by a single space. Next will be N lines, each of which gives the information about one specific competing team.Each of the N lines contains a string S (with length at most 30, and consists of upper and lower case alphabetic characters) followed by three integers, A(0 <= A <= 10), T (0 <= T <= 10) and P (0 <= P <= 5000), where S is the name of the team, A indicates whether the team is an all-girls team (it is not an all-girls team if Ai is 0, otherwise it is an all-girls team). T is the number of problems the team solved, and P is the penalty value of the team.
The input guarantees that no two teams who solved at least one problem have both the same T and P.
输出
示例输入
35 3AU001 0 0 0AU002 1 1 200AU003 1 1 30AU004 0 5 500AU005 0 7 10002 1BOYS 0 10 1200GIRLS 10 1 2903 3red 0 0 0green 0 0 0blue 0 1 30
示例输出
Case 1:AU003AU004AU005Case 2:BOYSGIRLSCase 3:blue33
提示
来源
1 #include2 #include 3 using namespace std; 4 struct Team{ 5 char s[31]; 6 int a,b,c; 7 }team[10001]; 8 bool sel[10001]; 9 void solve(int n,int m,int cnt) //共n个队,输出m个队10 {11 int i,j,num=999999999;12 bool f = false; //是否有女队13 for(i=1;i<=m;i++){14 int Max=0,t;15 for(j=1;j<=n;j++) //找到最大的16 if(team[j].b>Max && team[j].b<=num && !sel[j]){17 Max = team[j].b;18 t = j;19 }20 num = Max;21 if(num<1) break;22 //找到与这个值相等的最小的值23 for(j=1;j<=n;j++){24 if(team[j].b==num && team[j].c Max && !sel[j]){ //女队35 Max = team[i].b;36 t = i;37 }38 //寻找做出这个题数的罚时最少的女队39 if(Max!=0){40 for(i=t;i<=n;i++){41 if(team[i].a!=0 && team[i].b==team[t].b && team[i].c >N;55 for(i=1;i<=N;i++){56 int n,m;57 memset(sel,0,sizeof(sel));58 cin>>n>>m;59 for(j=1;j<=n;j++) //input60 cin>>team[j].s>>team[j].a>>team[j].b>>team[j].c;61 //sort(team+1,team+n+1,cmp);62 cout<<"Case "< <<':'<
Freecode :