c++冰壶比赛

【问题描述】
在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!!!
(记得点赞!!!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值