本文主要是介绍NEFU 1284 宋哥看比赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
宋哥看比赛
Problem:1284
Time Limit:1000ms
Memory Limit:65535K
Description
在大家的帮助下,宋哥终于拿到了ICPC的奖牌,他非常的高兴,恰逢LOL的S7全球总决赛就要开赛了,宋哥决定去现场看一部分比赛,他现在要买票,已知现在共有32支队伍进行比赛,首先进行小组赛,每个小组四只队伍,分为八个小组,每个小组内进行双循环比赛,也就是每个小组进行六场比赛,之后每个小组的前两名晋级,之后晋级的16支队伍进行淘汰赛,进行八场比赛后决出八强,之后四场比赛决出四强,之后的两场比赛决出冠亚军,最后一场比赛决出冠军,共进行了63场比赛,我们将其按进行顺序编号0-62,宋哥买了一些场次的门票(可重复购买),众所周知,宋哥是非常有钱的,他买完门票之后发现只花费了0.01%的钱,宋哥想知道他买票前有多少钱,你能帮帮他么?
Input
第一行包含一个数字T,代表样例组数。之后每一组的第一行包含五个整数xi,分别代表小组赛、八分之一决赛、四分之一决赛、半决赛和决赛的票价,之后的一行包含一个数字n,代表宋哥购买的票数,之后的一行包含空格分隔的n个数字,代表宋哥买的每一张票的场次号。Limits: 1<=T<=1000 1<=n<=100 0<=xi<=1e16
Output
对于每一组样例,请输出"Case #x: y",x为组数,y为答案。
Sample Input
2 1 2 3 4 5 2 1 49 1 1 1 1 1 7 5 2 0 1 3 1 4
Sample Output
Case #1: 30000 Case #2: 70000
Hint
Source
MGH
题意:
中文题。
思路:
先把比赛分为五种,从0-47的,48-55的,56-59的,60-61的和62的。然后记下五种比赛的价钱,对于每次输入的编号都对应比赛的价钱加起来,最后*10000输出就行了。
但是数据大小会爆long long ,我用的long double 避免了这个问题。不过当时调试用0.llf输出的时候是可以过样例,后来再调试的时候就输不出来了。(真玄学。。)
后来改成用cout就可以调试过了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <algorithm>
using namespace std;int main()
{int t,cas=1,n;long long a[10];int s[105];scanf("%d",&t);while(t--){for(int i=1;i<=5;i++)scanf("%lld",&a[i]);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&s[i]);if(0<=s[i]&&s[i]<=47)s[i]=1;else if(48<=s[i]&&s[i]<=55)s[i]=2;else if(56<=s[i]&&s[i]<=59)s[i]=3;else if(60<=s[i]&&s[i]<=61)s[i]=4;elses[i]=5;}long double sum=0;for(int i=1;i<=n;i++){if(s[i]==1)sum+=a[1];else if(s[i]==2)sum+=a[2];else if(s[i]==3)sum+=a[3];else if(s[i]==4)sum+=a[4];elsesum+=a[5];}sum=sum*10000;printf("Case #%d: ",cas++);cout<<setiosflags(ios::fixed);cout<<setprecision(0)<<sum<<endl;}return 0;
}
这篇关于NEFU 1284 宋哥看比赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!