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 难度:
题意描述
给你 两个数,进行以下操作:
- 如果 , 那么 .
- 如果 , 那么 .
请输出经过多少次操作后 .
解析
为什么锣鼓评 ? 辗转相减法我之前都没了解过...
本题由于 , 直接模拟绝对 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
.