站外大模拟题求调
  • 板块灌水区
  • 楼主Igallta
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/29 00:28
  • 上次更新2023/12/29 16:41:17
查看原帖
站外大模拟题求调
813622
Igallta楼主2023/12/29 00:28
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;
}

2023/12/29 00:28
加载中...