3495 - ACM的规则
在ACM竞赛中,在解出相同题数的情况下,花时最短者获胜,小学生也参加了ACM竞赛,假设他突然智力爆表,解出了x道题目,共提交了y次。
<span style="font-size:16px;font-family:宋体;">注意,在</span><span style="font-size:16px;">ACM</span><span style="font-size:16px;font-family:宋体;">竞赛中如果你成功的解答了一题,那么该题的每次错误提交将会获得惩罚时间</span><span style="font-size:16px;">20</span><span style="font-size:16px;font-family:宋体;">分钟</span><span style="font-size:16px;">(</span><span style="font-size:16px;font-family:宋体;">在你解答总时间上增加</span><span style="font-size:16px;">20</span><span style="font-size:16px;font-family:宋体;">分钟</span><span style="font-size:16px;">)</span><span style="font-size:16px;font-family:宋体;">。解答总时间为成功解答的题目的所在时刻的和。现在我希望知道小学生总共花的最少时间和最大时间以便判断他最后的排名如何。</span><span></span>
题目输入
测试数据包含多组测试样例
<span style="font-size:16px;font-family:宋体;">第一行包含</span><span style="font-size:16px;">2</span><span style="font-size:16px;font-family:宋体;">个正整数</span><span style="font-size:16px;">x</span><span style="font-size:16px;font-family:宋体;">和</span><span style="font-size:16px;">y</span><span style="font-size:16px;font-family:宋体;">用空格隔开</span><span></span>
<span style="font-size:16px;font-family:宋体;">接下来的一行,包含</span><span style="font-size:16px;">x</span><span style="font-size:16px;font-family:宋体;">个正整数</span><span style="font-size:16px;">ai</span><span style="font-size:16px;font-family:宋体;">,为每题成功解答出该题所需的时间</span><span></span>
<span style="font-size:16px;">1<=x<=10,1<=y<=300</span>
<span style="font-size:16px;">X<=y</span>
<span style="font-size:16px;">0<=ai<=300</span>
题目输出
对于每组测试数据的输出包含一行
<span style="font-size:16px;font-family:宋体;">每行</span><span style="font-size:16px;">2</span><span style="font-size:16px;font-family:宋体;">和正整数分别为最短时间和最长时间</span><span></span>
输入/输出样例
题目输入
3 5 1 30 40
题目输出
143 221
提示
作者:李雪峰
C语言解答
#include<stdio.h> int main() { int x,y,t,i,j,a[12],sum; while(scanf("%d%d",&x,&y)!=EOF) { for(i=0;i<x;i++) scanf("%d",&a[i]); for(i=0;i<x-1;i++) for(j=i+1;j<x;j++) if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;} t=sum=0; for(i=0;i<x;i++) { t+=a[i]; sum+=t; } printf("%d ",sum+(y-x)*20); t=sum=0; for(i=x-1;i>=0;i--) { t+=a[i]; sum+=t; } printf("%d\n",sum+(y-x)*20); } return 0; }
C++解答
#include <bits/stdc++.h> using namespace std; int cmp(int xx,int yx) { return xx>yx; } int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int x,y; int a[15]; while(scanf("%d%d",&x,&y)!=EOF){ for (int i=0;i<x;i++){ scanf("%d",&a[i]); } sort(a,a+x); int ans=0,b=0; for (int i=0;i<x;i++){ b+=a[i]; ans+=b; } printf("%d ",ans+(y-x)*20); sort(a,a+x,cmp); ans=0,b=0; for (int i=0;i<x;i++){ b+=a[i]; ans+=b; } printf("%d\n",ans+(y-x)*20); } return 0; }
提示
作者:李雪峰