专栏文章

题解:P13829【MX-X18-T1】「FAOI-R6」520

P13829题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio5t942
此快照首次捕获于
2025/12/02 13:50
3 个月前
此快照最后确认于
2025/12/02 13:50
3 个月前
查看原文
考虑枚举所有四个方向中连续三个字符能组成的字符串,然后看是否有一个串与 ss 相等即可。
CPP
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

void solve()
{
	string s; cin >> s;
	
	if(s[0] == s[1] || s[0] == s[2] || s[1] == s[2]){ // 不能有相同字符
		cout << "No"; return ;
	}
	
	int n = 5, m = 4;
	vector<vector<char>> mp = {
		{' ', '/', '*', '-'},
		{'7', '8', '9', '+'},
		{'4', '5', '6', '+'},
		{'1', '2', '3', ' '},
		{'0', '0', '.', ' '}
	};
	
	// 从左至右
	for(int i = 0; i < n; i ++){
		for(int j = 0; j <= m - 3; j ++){
			string t; 
			t += mp[i][j]; t += mp[i][j + 1]; t += mp[i][j + 2];
			if(t == s){
				cout << "Yes"; return ;
			}
		}
	}
	// 从右至左
	for(int i = 0; i < n; i ++){
		for(int j = m - 1; j >= 2; j --){
			string t;
			t += mp[i][j]; t += mp[i][j - 1]; t += mp[i][j - 2];
			if(t == s){
				cout << "Yes"; return ;
			}
		}
	}
	// 从上至下
	for(int j = 0; j < m; j ++){
		for(int i = 0; i <= n - 3; i ++){
			string t; 
			t += mp[i][j]; t += mp[i + 1][j]; t += mp[i + 2][j];
			if(t == s){
				cout << "Yes"; return ;
			}
		}
	}
	// 从下至上
	for(int j = 0; j < m; j ++){
		for(int i = n - 1; i >= 2; i --){
			string t; 
			t += mp[i][j]; t += mp[i - 1][j]; t += mp[i - 2][j];
			if(t == s){
				cout << "Yes"; return ;
			}
		}
	}
	
	cout << "No";
}

signed main()
{
	ios :: sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
	solve();
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...