题解:P10677 『STA - R6』inkar-usi
Genshin_ZFYX · · 题解
首先,第一个字母必定是矩阵中字典序最大的字母。
第二个字母,是第一个字母旁边字典序最大的字母。
第三个字母是第二个字母旁边字典序最大的字母,不难想到肯定是第一个字母,这样就回到了第一步。
由此可得循环节长度
有时候答案只有一个字母。
最后,如果答案有两个字母且两个字母相同,输出一个就行。
小技巧:如果要把字符强制转换成字符串,可以让一个空串加上这个字符。
AC 代码:
#include<bits/stdc++.h>
using namespace std;
//#define int long long
#define I return
#define love 0
#define FIRESTARS ;
string ans,space;
int n,m,dx[]={0,1,0,-1},dy[]={1,0,-1,0};
char a[1005][1005],maxn=0;
signed main()
{
cin.tie(0)->sync_with_stdio(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
maxn=max(maxn,a[i][j]);
}
ans=space+maxn;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j]==maxn)
for(int k=0;k<4;k++)
{
int xx=dx[k]+i,yy=dy[k]+j;
if(xx>=1&&yy>=1&&xx<=n&&yy<=m&&a[xx][yy]!='#')
ans=max(ans,space+a[i][j]+a[xx][yy]);
}
if(ans.size()==1)cout<<ans;
else
{
if(ans[0]==ans[1])cout<<ans[0];
else cout<<ans;
}
I love FIRESTARS
}