题目链接: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; }