(未AC)7-10 冰壶比赛 (30分)
在3月29日举行的女子冰壶世锦赛决赛中,;钟志颖、陈佳衡、叶翰熙和傅琰组成的中国女子冰壶队以8比6击败了冬奥会和世锦赛双冠王瑞典队,夺得了中国冰壶历史上第一枚世锦赛金牌,创造了历史。美丽、实力兼具的中国冰壶姑娘们也赢得了超高的赞誉。 在冰壶比赛中,给出一个目标点P,以及一个规定的正整数r。每一局由甲乙两队轮流投冰壶各8次后,该局比赛结束。此时,哪一方的冰壶最终离目标点P更近,该方得分,另一方不得分。得分方每颗离目标点P距离小于或等于r、位置较另一队所有冰壶都更接近目标点P的冰壶都可以得1分。 比赛最多进行10局。双方之间的某局比赛结束后,落后一方可以弃权。此时,比赛不再进行下去。 已知每一局结束时,双方的每个冰壶离目标点P的距离,以及正整数r,请你写一个程序判断两队之间每一局比赛的得分,以及总得分。
输入格式:
第一行只有一个正整数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,表示此时发生弃权情况。
输出格式:
有若干行,每行有二个整数,中间以一个冒号分隔,表示每一局比赛甲乙双方的比分(甲得分在前)。 最后一行有二个整数,中间以一个冒号分隔,表示甲乙双方比赛的最终得分(甲得分在前)。
输入样例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 1 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 0:0 3:0 3: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 1 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 0:0 3:0 3:0 0:2 0:0 0:0 3:0 2:0 0:0 11:3
【样例说明】 在样例1和样例2中: 第1局比赛时,甲方离目标点P的最近距离为3,乙方离目标点P的最近距离为2,乙方得分。乙比甲方的3更小的值只有1个(值为2壶),因此乙方得1分。 第2局比赛时,甲方离目标点P的最近距离为1,乙方离目标点P的最近距离为1,双方均不得分。 第3局比赛时,甲方离目标点P的最近距离为1,乙方离目标点P的最近距离为15,甲方得分。甲比乙方的15小的值有5个(2、10、1、14、3),但小于等于r=8的值只有3个(2、1、3),因此甲得3分。 样例1只进行了3局,总得分为3:1,样例2所有10局比赛进行完,总得分为11:3。
【数据限制】70%的数据,双方均不弃权,比赛进行10局。 100%的数据,每只冰壶距离目标点P的距离不超过100。
1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 using namespace std; 5 int main() 6 { 7 int r; 8 int jia[8], yi[8], min_jia = 999, min_yi = 999, sum = 0, sum_jia = 0, sum_yi = 0, flag = 1, flag1 = 1; 9 cin >> r; 10 for (int i = 2; i <= 21; i++) 11 { 12 int tmp; 13 for (int j = 0; j < 8; j++) 14 { 15 cin >> tmp; 16 if (tmp == -1) 17 { 18 flag = 0; 19 break; 20 } 21 if (i % 2 == 0) 22 { 23 if (min_jia > tmp) 24 min_jia = tmp; 25 jia[j] = tmp; 26 } 27 else 28 { 29 if (min_yi > tmp) 30 min_yi = tmp; 31 yi[j] = tmp; 32 } 33 } 34 if (flag == 0) 35 break; 36 if (flag1 == 1) 37 { 38 flag1 = 2; 39 continue; 40 } 41 if (flag1 == 2) 42 { 43 flag1 = 1; 44 } 45 if (min_yi < min_jia) 46 { 47 for (int k = 0; k < 8; k++) 48 { 49 if (yi[k] < min_jia&&yi[k] <= r) 50 { 51 sum++; 52 } 53 } 54 sum_yi += sum; 55 min_yi = 999; 56 printf("0:%d\n", sum); 57 sum = 0; 58 } 59 else if (min_yi > min_jia) 60 { 61 for (int k = 0; k < 8; k++) 62 { 63 if (jia[k] < min_yi&&jia[k] <= r) 64 { 65 sum++; 66 } 67 } 68 sum_jia += sum; 69 min_jia = 999; 70 printf("%d:0\n", sum); 71 sum = 0; 72 } 73 else if (min_yi = min_jia) 74 { 75 printf("0:0\n"); 76 min_jia = min_yi = 999; 77 } 78 79 } 80 printf("%d:%d", sum_jia, sum_yi); 81 }