1 条题解

  • 0
    @ 2025-8-24 23:00:10

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Genshin_ZFYX
    .

    搬运于2025-08-24 23:00:10,当前版本为作者最后更新于2024-07-01 08:46:54,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    首先,第一个字母必定是矩阵中字典序最大的字母。

    第二个字母,是第一个字母旁边字典序最大的字母。

    第三个字母是第二个字母旁边字典序最大的字母,不难想到肯定是第一个字母,这样就回到了第一步。

    由此可得循环节长度 2\le 2,具体做法就是找到第一个字母(可能有多个),枚举这个字母的上、下、左、右并连接成一个字符串,找出字典序最大的字符串即可。

    有时候答案只有一个字母。

    最后,如果答案有两个字母且两个字母相同,输出一个就行。

    小技巧:如果要把字符强制转换成字符串,可以让一个空串加上这个字符。

    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
    }
    
    
    • 1

    信息

    ID
    10077
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者