5、斯诺克
题目描述
斯诺克台球比赛中有 21 个球,其中有 15 个红球,6 个彩球(黄、绿、棕、蓝、粉、黑)。甲乙二
人轮流打球。打一个红球得 1 分,打一个彩球的得分如下:
黄球:2 分; 绿球:3 分; 棕球:4 分;
蓝球:5 分; 粉球:6 分; 黑球:7 分;
最后以得分高者为胜。
简化后的打球规则如下:
1.如果有红球,第奇数次必须打红球,打过的红球从桌面上拿走;
2.每打一个红球后,可以任意选一个彩球打,打红球后接着打的彩球不从桌面上拿走;如果桌面
上已经没有红球可打了,那么按照分值从小到大的次序打彩球,这时候每打一个彩球都从桌面上拿
走。
打球时犯规的判罚如下:
没有打中球,给对方加 4 分;
2.没有按照打球规则打该打的球,即打中了错误的球时:
(1)如果这个错误的球的分值大于 4,那么给对方加等于这个球的分值;
(2)如果这个错误的球的分值不大于 4,那么给对方加 4 分;
打中的错误球不从桌面上拿走。
请统计某局比赛进行到现在为止的比分。
输入格式
输入有一行,表示进球的顺序,按甲先乙后的顺序进行击球
其中:
(1)1 至 7 的整数表示打了相应分值的球;
(2)数字 0,表示没有打中球犯规;
(3)打了错误球或者没有打中球的犯规会交换对手击球;
输入数据保证是正确,不会出现打到桌面上不存在的球的情况,数据不必检验。
输出格式
输出仅有一行,该行有二个整数(互相之间以一个空格分隔),表示比赛进行到现在为止甲乙二人的
得分(先打的甲在前)。
输入样例 1
17160171
输出样例 1
15 13
输入样例 2
171751716150
输出样例 2
20 26
输入样例 3
171615141301217161514131217161525345
输出样例 3
47 63
我的代码:
/****************************************
作者:
版权:
日期:
*****************************************/
#include<bits/stdc++.h>
#define LL k<<1
#define RR k<<1|1
#define int long long
using namespace std;
string s;
int cntj = 1, cnty = 0, h = 15, c = 6, fenj, feny;
bool b[11];
bool j = 1;
bool pd(int x) {
for (int i = x; i <= 7; i++) {
if (b[i])return 0;
}
b[x] = 1;
return 1;
}
signed main() {
ios::sync_with_stdio(0);
cin >> s;
for (int i=0;i<s.size();i++) {
char k=s[i];
// cout<<"当前行动:";
// if(j)cout<<"甲";
// else cout<<"乙";
// cout<<" cntj:"<<cntj<< " cnty:" <<cnty<< " canj:" <<canj<< " cany:" <<cany<<' ';
if (k != '0') {
if (((j && cntj % 2 == 1 )|| (!j && cnty % 2 == 1)) && h) {
if (k != '1') {
if (j)++feny;
else ++fenj;
} else {
if(j){
++fenj;
}else{
++feny;
}
--h;
++i;
while(i++){
k=s[i];
if(k=='1'){
if(j)++fenj;
else ++feny;
}
else break;
}
if(j)fenj+=k-48;
else feny+=k-48;
}
} else if (c) {
if (!h) {
if (j) {
if (pd(k - 48))fenj += (k - 48), --c;
else {
if(k-48 > 4)feny+=(k-48);
else feny+=4;
}
} else {
if (pd(k - 48))feny += (k - 48), --c;
else {
if(k-48 > 4)fenj+=(k-48);
else fenj+=4;
}
}
} else {
if(j){
if(k-48 > 4)feny+=k-48;
else feny+=4;
}
else{
if(k-48 > 4)fenj+=k-48;
else fenj+=4;
}
}
}
} else j ? feny += 4 : fenj += 4;
j = !j;
if (j)++cntj;
else ++cnty;
// cout<<"fenj:"<<fenj<< " feny:" <<feny<< " canj:" <<canj<< " cany:" <<cany<<' '<<k-48<<'\n';
}
cout << fenj << ' ' << feny;
return 0;
}