超难蓝题!快来做
2025-08-28 13:40:55
发布于:江苏
35阅读
0回复
0点赞
题面翻译
题目描述
给定一个 的符号方阵组成的填词游戏,里面由小写字母和 #
组成。
一个单词指的是在方阵中从左到右或从上到下把经过的字母依次相连(不得包含 #
)形成的字母串。不一定要整行或整列都包含,且这个字母串的长度至少为 。对于竖向的单词,头尾的上方或者下方要么顶着 #
,要么处于边界;横向单词的左右也需要符合这个要求。
请你求出字典序最小的单词。
输入格式
输入第一行为两个整数 ,表示方阵的行数和列数。
接下来的 行,每行 个字符,描述这个方阵。
输出格式
输出一行若干个字母,表示字典序最小的单词。
说明/提示
数据规模与约定
对于 的数据,保证 。
(转自洛谷)
对于每个点,看它是否为符合条件字符串的首位,然后保存所有这样的字符串,最后输出最小的即可。
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
string a[25];
vector<string>s;
signed main()
{
cin>>n>>m;
for(int i=0;i<n;i++)cin>>a[i];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(a[i][j]=='#')continue;
string h="",l="";
int k=j;
while(k<m&&a[i][k]!='#')h+=a[i][k++];
if(h.size()>=2&&(j==0||a[i][j-1]=='#'))s.push_back(h);
k=i;
while(k<n&&a[k][j]!='#')l+=a[k++][j];
if(l.size()>=2&&(i==0||a[i-1][j]=='#'))s.push_back(l);
}
sort(s.begin(),s.end());
cout<<s[0];
return 0;
}
建议难度:入门或普及-。
全部评论 2
吓哭了
1周前 来自 广东
1%%%
1周前 来自 江苏
1woc,ACGO 的题目怎么一出 TJ 就一堆人 AC,好难猜啊
1周前 来自 江苏
16
1周前 来自 上海
0
吓哭了
1周前 来自 上海
0
有帮助,赞一个