ABC297 BCD 题解 -liuyanghao

liuyanghao2009 2023-07-12 10:59:49 1

我从这里抄的

abc297 —题解

B - chess960

题目大意

给定一个长度为 8 的字符串,刚好包含 K 与 Q 各一个,R、B 与 N 各两个。判断 S 是否满足下面的条件:

  • 假设从左数的第 x 个与第 y 个字符是 B,x<y。那么 x 与 y 有不同的奇偶性。
  • K 必须在两个 R 之间。

解题思路


代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
char a[10];
int t = 1;
int x, y, z, sum;
signed main() {
	cin >> a+1;
	for(int i = 1 ; i <= 8; i++) {
		if(a[i] == 'B'){
			if(t == 1){
				t++;
				x=i;
			}
			else {
				y=i;
			}
		}
		if(a[i] == 'R') 
			sum++;
		if(a[i] == 'K' && sum == 1)//判断K是否在 
			z = 1;
	}
	if((x + y) % 2 == 1&& z == 1)
		cout << "Yes";
	else 
		cout << "No";
	return 0;
}

C - PC on the Table

题目大意

给定一个 H 行 W 列的二维字符画。只包含字符 . 与 T。 Taka 可以进行下面的步骤任意次(可能零次):

  • 选择一个满足 1≤i≤H 且 1≤j≤W−1 的位置位 (i,j) ,如果位置 (i,j) 与位置 (i,j+1) 都是 T,就可以把 位置 (i,j) 改为 P,位置 (i,j+1) 改为 C。

他会尽可能多得做这个步骤,找到一个最多操作次数时可能的最终局面

  • 1≤H≤100
  • 2≤W≤100

解题思路


代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
	int h, w;
    cin>>h>>w;
 
    string s[105];
 
    for(int i = 1; i <= h; i++) cin>>s[i];
 
    for(int i = 1 ; i<= h; i++)
    {
        for(int j = 0; j <= s[i].length() - 1; j++)
        {
            if(s[i][j] == 'T' && s[i][j + 1] == 'T')
            {
                s[i][j] = 'P';
                j++;
                s[i][j] = 'C';
            }
        }
    }
    for(int i = 1; i <= h; i++)
    {
        cout<<s[i]<<endl;
    }
	return 0;
}

D - Count Subtractions

题目大意

给定正整数 A 和 B。 你将重复下面操作,直到 A=B: 比较 A 与 B 的大小,并执行下面的一种操作:

  • 如果 A>B,那么把 A 变成 A−B
  • 如果 A<B,那么把 B 变成 B−A

需要操作多少次。 1≤A,B≤10^18^


解题思路


代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
	int a, b;
    cin >> a >> b;
    int ans = 0;
    while(a != b)
    {
        if(a > b)
        {
            if(a % b == 0)
            {
                ans += a / b - 1;
                break;
            }
            ans += a / b;
            a -= (a / b) * b;
        }
 
        else
        {
            if(b % a == 0)
            {
                ans += b / a - 1;
                break;
            }
            ans += b / a;
            b -= (b / a) * a;
        }
    }
    cout << ans;
	return 0;
}

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