【题解】WebGoC 100091.斯诺克 题目描述同学们游览江南美景的时候学到了一种流行的运动斯诺克台球。斯诺克台球比赛中有22个球其中有1个白球15个红球6个彩球黄、绿、棕、蓝、粉、黑。甲乙二人轮流用白球去打球。打进一个红球得1分打进一个彩球的得分如下黄球2分绿球3分棕球4分蓝球5分粉球6分黑球7分最后以得分高者为胜。简化后的打球规则如下1.如果有红球第奇数次必须打红球打过的红球从桌面上拿走2.每打一个红球后可以任意选一个彩球打打红球后接着打的彩球不从桌面上拿走3.如果桌面上已经没有红球可打了那么按照分值从小到大的次序打彩球这时候每打一个彩球都从桌面上拿走。打球时犯规的判罚如下1. 没有打中球给对方加4分2没有按照打球规则打该打的球即打中了错误的球时1如果这个错误的球的分值大于4那么给对方加等于这个球的分值2如果这个错误的球的分值不大于4那么给对方加4分打中的错误球不从桌面上拿走。请统计某局比赛进行到现在为止的比分。输入格式第一行有二个整数n和m表示甲打了n个球乙打了m个球。n和m之间以一个空格分隔。第二行有n个以空格分隔的整数表示甲的n次连续打球情况。第三行有m个以空格分隔的整数表示乙的m次连续打球情况。甲打完n次后乙接着打m次。第二行和第三行中1至7的整数表示打了相应分值的球最后一个数字是0表示没有打中球犯规0只会出现在这二行的最后一个数字处打了错误球的犯规也只会出现在这二行最后一个数字处输入数据保证是正确不会出现打到桌面上不存在的球的情况数据不必检验。输出格式直接输出比分用1号颜色大小为100的格式输出分数分数、冒号之间的中心距离是100。输入/输出例子1输入4 31 7 1 61 7 1输出输入/输出例子2输入11 241 7 1 7 1 7 1 7 1 7 11 7 1 7 1 7 1 7 1 7 1 7 1 7 1 7 1 7 2 3 4 5 6 7输出输入/输出例子3输入5 31 5 1 3 21 5 1输出输入/输出例子4输入5 31 3 1 4 01 6 6输出样例解释【样例说明1】甲依次打了红球、黑球、红球、粉球甲得15分1716乙依次打了红球、黑球、红球乙得9分171【样例说明2】甲每打一个红球后打一个黑球共打了5次最后打的是红球得41分5*(17)141乙每打一个红球后打一个黑球打完所有红球后按规则依次将黄、绿、棕、蓝、粉、黑球全部 打进得99分9*(17)23456799【样例说明3】甲打到第5球时打错球犯规了要给乙加4分。【样例说明4】甲打到第5球没有打中给乙加4分。乙打到第3球打错6分球给甲加6分。数据范围1n,m40参考答案int red 15; int nextColorBall; int a_score 0, b_score 0; int hitA[45]; int hitB[45]; int deal(int cnt, int who) { bool afterRed false; for (int i 0; i cnt; i) { int hit; if (who 1) { hit hitA[i]; } else { hit hitB[i]; } bool is_last (i cnt - 1); if (!is_last) { if (afterRed true) { if (hit ! 1) { if (who 1) a_score a_score hit; else b_score b_score hit; } afterRed false; } else { if (red 0) { if (hit 1) { if (who 1) a_score a_score 1; else b_score b_score 1; red red - 1; afterRed true; } } else { if (hit nextColorBall) { if (who 1) a_score a_score hit; else b_score b_score hit; nextColorBall nextColorBall 1; } } } } else { if (hit 0) { if (who 1) b_score b_score 4; else a_score a_score 4; } else { int tmp_red red; bool tmp_ar afterRed; int tmp_ncb nextColorBall; int tmp_a a_score; int tmp_b b_score; bool ok false; if (tmp_ar true) { if (hit ! 1) { ok true; if (who 1) tmp_a tmp_a hit; else tmp_b tmp_b hit; } tmp_ar false; } else { if (tmp_red 0) { if (hit 1) { ok true; if (who 1) tmp_a tmp_a 1; else tmp_b tmp_b 1; tmp_red tmp_red - 1; tmp_ar true; } } else { if (hit tmp_ncb) { ok true; if (who 1) tmp_a tmp_a hit; else tmp_b tmp_b hit; tmp_ncb tmp_ncb 1; } } } if (ok true) { red tmp_red; afterRed tmp_ar; nextColorBall tmp_ncb; a_score tmp_a; b_score tmp_b; } else { int add; if (hit 4) add hit; else add 4; if (who 1) b_score b_score add; else a_score a_score add; } } } } return 0; } int main() { int n, m; cin n m; for (int i 0; i n; i) { cin hitA[i]; } for (int i 0; i m; i) { cin hitB[i]; } red 15; nextColorBall 2; a_score 0; b_score 0; deal(n, 1); deal(m, 2); p.text(a_score, 1, 100); p.text(:,1,100,0,100,0); p.text(b_score,1,100,0,200,0); p.hide(); return 0; }题目链接https://v1.51goc.com/question/viewProgram/100091进去后要登录