1 条题解
-
0
解题思路: 本题需要模拟三人在不同竞赛中的解题过程,根据他们的策略计算解题数量和得分,然后比较得出获胜者。具体步骤包括:
- 读取竞赛信息,包括持续时间和题目难度。
- 分别模拟比尔、史蒂夫和莱纳斯的解题过程,计算他们的解题数量和得分。
- 比较三人的解题数量和得分,确定获胜者 代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node{ int p;//解题数目 int s;//得分 int y;//优先级,把Steve的设为最高,在最后排序时使用 char name[10];//姓名 }; bool cmp(node a,node b){ if(a.p!=b.p) return a.p>b.p;//解题数目多的在前 if(a.s!=b.s) return a.s<b.s;//得分少的在前 return a.y<b.y;//当解题数目和得分相同时,把Steve排在最前面 } int main(){ int n,n2,totaltime,num,a[30],i,timeused,testcase=0; node p[3]; scanf("%d",&n);//测试组数 n2=n; while(n2--){ testcase++; timeused=0; scanf("%d%d",&totaltime,&num);//比赛时间,题目数量 memset(p,0,sizeof(p)); p[0].y=p[2].y=1; strcpy(p[0].name,"Bill"); strcpy(p[1].name,"Steve"); strcpy(p[2].name,"Linus"); for(i=0;i<num;i++)//输入每道题所花费的时间 scanf("%d",&a[i]); for(i=0;i<num;i++){//Bill得分 timeused=timeused+a[i]; if(timeused>totaltime) break; p[0].p++; p[0].s=p[0].s+timeused; } sort(a,a+num);//把题目按时间升序 timeused=0; for(i=0;i<num;i++){//Steve得分 timeused=timeused+a[i]; if(timeused>totaltime) break; p[1].p++; p[1].s=p[1].s+timeused; } timeused=0; for(i=num-1;i>=0;i--){//Linus得分 timeused=timeused+a[i]; if(timeused>totaltime) break; p[2].p++; p[2].s=p[2].s+timeused; } sort(p,p+3,cmp);//排序,排完后第一名在p[0] printf("Scenario #%d:\n",testcase); printf("%s wins with %d solved problems and a score of %d.\n",p[0].name,p[0].p,p[0].s); if(testcase<n) printf("\n"); } return 0; }
- 1
信息
- ID
- 1498
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 10
- 已通过
- 1
- 上传者