ABC297 BCD 题解 - 陈思远 x07ckY

chensiyuan 2023-07-26 21:26:16 6

B: chess960

LUOGU 难度:

题意描述

给你一个长度为 的字符串, 判断 K 在两个 R 之间, 且两个 B 的位置的奇偶性不同.

如果是, 输出 Yes, 否则输出 No.

解析

根据题意判断即可

代码

#include <iostream>
using namespace std;


int main() {
	string str;
	auto func_kinr = [](string str) {
		int r = 0;
		for (auto item : str) {
			if (item == 'R') {
				r++;
				if (r == 2) {
					break;
				}
			}
			else if (item == 'K' && r == 1) {
				return true;
			}
		}
		return false;
	};

	auto func_b = [](string str) {
		int b[2], p = 0;
		for (int i = 0; i < str.size(); i++) {
			if (str[i] == 'B') {
				b[p] = i;
				p++;
			}
		}
		if (b[0] % 2 != b[1] % 2) {
			return true;
		}
		else {
			return false;
		}
	};

	cin >> str;
	if (func_kinr(str) && func_b(str)) {
		cout << "Yes" << endl;
	}
	else {
		cout << "No" << endl;
	}
	return 0;
}

代码解析

用到了很装逼的 lambda.

语法是

auto something = [](arguments) {

};

其中 auto 代表让编译器自动处理类型, arguments 里放上要传入的参数.

C: PC on the Table

LUOGU 难度:

题意描述

给你个字符矩阵, 把里面连续的 ** 替换成 PC, 输出处理过的答案.

可能有多个解, 输出一个就行.

解析

根据题意判断即可

代码

#include <iostream>
#include <vector>
using namespace std;


int main() {
	int h, w;
	vector <string> s;
	cin >> h >> w;
	s.resize(h);
	for (auto& item : s) {
		cin >> item;
		for (int i = 0; i < item.size() - 1; i++) {
			if (item[i] == 'T' && item[i + 1] == 'T') {
				item[i] = 'P';
				item[i + 1] = 'C';
			}
		}
		cout << item << endl;
	}
}

D: Count Subtractions

LUOGU 难度:

题意描述

给你 两个数,进行以下操作:

  1. 如果 , 那么 .
  2. 如果 , 那么 .

请输出经过多少次操作后 .

解析

为什么锣鼓评 ? 辗转相减法我之前都没了解过...

本题由于 , 直接模拟绝对 TLE. 所以要用我们高级的辗转相减法.

代码

#include <iostream>
using namespace std;


int main() {
	long long a, b;
	cin >> a >> b;
	if (a < b) {
		swap(a, b);
	}

	long long result = 0;
	while (a % b) {
		result += a / b;
		a %= b;
		swap(a, b);
	}
	result += (a - b) / b;
	cout << result << endl;
	return 0;
}

代码解析

long long .

{{ vote && vote.total.up }}