【问题描述】
在3月29日举行的女子冰壶世锦赛决赛中,王冰玉、柳荫、岳清爽和周妍组成的中国女子冰壶队以8比6击败了冬奥会和世锦赛双冠王瑞典队,夺得了中国冰壶历史上第一枚世锦赛金牌,创造了历史。美丽、实力兼具的中国冰壶姑娘们也赢得了超高的赞誉。
在冰壶比赛中,给出一个目标点P,以及一个规定的正整数r。每一局由甲乙两队轮流投冰壶各8次后,该局比赛结束。此时,哪一方的冰壶最终离目标点P更近,该方得分,另一方不得分。得分方每颗离目标点P距离小于或等于r、位置较另一队所有冰壶都更接近目标点P的冰壶都可以得1分。
比赛最多进行10局。双方之间的某局比赛结束后,落后一方可以弃权。此时,比赛不再进行下去。
已知每一局结束时,双方的每个冰壶离目标点P的距离,以及正整数r,请你写一个程序判断两队之间每一局比赛的得分,以及总得分。
【输入】输入文件Curling.in的第一行只有一个正整数r。
以下有若干行(不超过20行),除了最后一行外,每一行有8个正整数(互相之间以一个空格分隔)。
第2行的第j个数表示第1局比赛结束时,甲方的第j个冰壶距离目标点P的距离;
第3行的第j个数表示第1局比赛结束时,乙方的第j个冰壶距离目标点P的距离;
第4行的第j个数表示第2局比赛结束时,甲方的第j个冰壶距离目标点P的距离;
第5行的第j个数表示第2局比赛结束时,乙方的第j个冰壶距离目标点P的距离;
… …
第2k行的第j个数表示第k局比赛结束时,甲方的第j个冰壶距离目标点P的距离;
第2k+1行的第j个数表示第k局比赛结束时,乙方的第j个冰壶距离目标点P的距离;
如果有一方中途弃权,则最后一行(偶数行)只有一个整数-1,表示此时发生弃权情况。
【输出】输出文件Curling.out有若干行,每行有二个整数,中间以一个冒号分隔,表示每一局比赛甲乙双方的比分(甲得分在前)。
最后一行有二个整数,中间以一个冒号分隔,表示甲乙双方比赛的最终得分(甲得分在前)。
【样例输入1】
8
5 20 18 19 3 15 13 3
20 2 17 12 5 18 10 11
20 3 4 1 2 11 9 2
4 15 19 9 8 14 11 10
15 2 10 1 19 14 3 18
15 17 21 19 24 32 19 26
-1
【样例输出1】
0:1
4:0
3:0
7:1
【样例输入2】
8
5 20 18 19 3 15 13 3
20 2 17 12 5 18 10 11
20 3 4 1 2 11 9 2
4 15 19 9 8 14 11 10
15 2 10 1 19 14 3 18
15 17 21 19 24 32 19 26
5 1 14 13 15 2 3 11
14 7 5 19 10 12 6 9
3 14 9 8 4 8 3 10
14 6 9 4 8 2 1 5
9 8 1 2 8 8 7 18
16 8 20 19 3 1 10 5
2 13 19 2 18 9 18 3
6 5 5 20 6 17 2 18
17 3 20 6 9 3 17 17
20 10 8 12 19 19 18 20
15 18 4 18 17 14 5 16
6 14 8 14 19 7 13 7
15 9 2 8 20 3 10 14
8 6 3 2 4 11 4 10
【样例输出2】
0:1
4:0
3:0
3:0
0:2
0:0
0:0
3:0
2:0
0:0
15:3
【样例说明】
在样例1中,比赛进行了3局后,有一方弃权了,比赛到此结束,最终比分为已经进行过的前3局比分之和。
在样例1和样例2中:
第1局比赛时,甲方离目标点P的最近距离为3,乙方离目标点P的最近距离为2,乙方得分。乙比甲方的3更小的值只有1个(值为2壶),因此乙方得1分。
第3局比赛时,甲方离目标点P的最近距离为1,乙方离目标点P的最近距离为15,甲方得分。甲比乙方的15小的值有5个(2、10、1、14、3),但小于等于r=8的值只有3个(2、1、3),因此甲得3分。
样例1只进行了3局,总得分为7:1,样例2所有10局比赛进行完,总得分为15:3。
【数据限制】70%的数据,双方均不弃权,比赛进行10局。
100%的数据,每只冰壶距离目标点P的距离不超过100。
代码如下:
#include<bits/stdc++.h>
using namespace std;
long long a[11],b[11],n,x,l=-1,s1,s2,a1,a2;
int main(){
cin>>n;
while(cin>>x){
if(x==-1) break;
l++;
if(l<8) a[l]=x;
else b[l-8]=x;
if(l==15){
l=-1;
sort(a,a+8);
sort(b,b+8);
a1=a2=0;
while(a[a1]<b[0]&&a[a1]<=n) a1++;
while(a[0]>b[a2]&&b[a2]<=n) a2++;
cout<<a1<<":"<<a2<<endl;
s1+=a1;
s2+=a2;
}
}
cout<<s1<<":"<<s2;
}
如果大家有兴趣的话,可以加入火箭工作室!工作室QQ号:2558249307!!!
(记得点赞!!!)