题目链接:http://poj.org/problem?id=2497
题目大意:
有三个人做题,但是他们做同一道题的所用的时间相同,但是他们做题的顺序不同,在计分时,按照如下的方式进行计分:
The score for a single problem is the time in minutes from start of the contest until you solve it. The overall score is the sum of scores of the problems you solved.
而获胜者的归属按照下面的规则进行:
The winner is the one who solved the most problems, and in case of a tie, the one with the lowest score. If there's still a tie, then they agree that Steve wins because he always brings delicious apple pie.
#include <iostream>
#include <algorithm>
#include <string>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int main()
{
int count = 1;
int group;
scanf("%d",&group);
while(group--){
int time ,ccase, firnu[30],i;
scanf("%d%d",&time,&ccase);
for(i=0;i<ccase;i++)
scanf("%d",&firnu[i]);
int Bill=0,Billsum=0, Steve=0, Stevesum=0, Linus =0,Linussum=0, a=0,b=0,c=0;//Bill=0, Steve=0,Linus =0,记录三个人的总分,Billsum=0, Stevesum=0, Linussum=0则分别记录他们做完的题到现在的时间,也就是从开始到现在的时间
i=0;
while((Billsum+firnu[i])<=time && i<ccase){///以下分别计算三个人的分数
Bill=Bill+firnu[i]+Billsum;
Billsum=Billsum+firnu[i];
i++;
a++;
}
sort(firnu,firnu+ccase); i=0;
while((Stevesum+firnu[i])<=time && i<ccase){
Steve=Steve+firnu[i]+Stevesum;
Stevesum=Stevesum+firnu[i];
i++;
b++;
}
i=ccase-1;
while((Linussum+firnu[i])<=time && i>=0){
Linus=Linus+firnu[i]+Linussum;
Linussum=Linussum+firnu[i];
i--;
c++;
}
int max,solve;
string maxname;
if(b>a||(b==a && Steve<=Bill) ){
max=Steve;
solve=b;
maxname="Steve";
}
else{
max=Bill;
solve=a;
maxname="Bill";
}
if(c>solve||(c==solve&&Linus<max)){
max=Linus;
solve=c;
maxname="Linus";
}
// cout<<"B "<<a<<" solved problems and a score of "<<Bill<<" "<<Billsum<<"
";该处亟待解决,用printf的时候输不出正确的结果,可能是使用的问题
// cout<<"S "<<b<<" solved problems and a score of "<<Steve<<" "<<Stevesum<<"
";
// cout<<"L "<<c<<" solved problems and a score of "<<Linus<<" "<<Linussum<<"
";
// cout<<"aaaaaaaaaaaaaaaaaaaaaaaaa"<<endl;
//printf("Scenario #%d:
",&count);
cout<<"Scenario #"<<count<<":"<<endl;
cout<<maxname;
cout<<" wins with "<<solve<<" solved problems and a score of "<<max<<".
";
// printf(" wins with %d solved problems and a score of %d
",&solve,&max);
count++;
}
return 0;
}