洛谷题解洛谷题解题解:P10677 『STA - R6』inkar-usi
xyx404
思路:
看题,需要在矩阵上找出一条起始点任意的路径(可以重复经过某个格子),使得字典序最大。
那么通过可以重复这四个字我们可以知道最后求出的字符串的长度一定是小于等于二的。
所以,我们可以在输入时查找最大的字母(为了保证字典序最大)用一个变量 c 存下来,输入完之后,历遍矩阵,当历遍到的字母为我们找到的最大的字母时,查找他上下左右四个方向的最大的字母,然后用 ch 存下来。
最后在循环结束后在 c 与 ch 不相同时输出 ch 就可以了,相同的情况就不要输出了。
代码:
#include<bits/stdc++.h> using namespace std; #define LL long long #define itn int #define ull unsigned long long int n,m; char ch; char jz[1500][1500]; int dx[]={1,-1,0,0},dy[]={0,0,-1,1}; int main(){ int mx=0,my=0; char c='A'-1; cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>jz[i][j];if(jz[i][j]!='#')if(jz[i][j]>c)c=jz[i][j]; } } cout<<c; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(jz[i][j]!='#')if(jz[i][j]==c){ mx=i;my=j; for(int i=0;i<4;i++){ int tx=mx+dx[i],ty=dy[i]+my; if(tx<1||ty<1||tx>n||ty>m)continue; if(jz[tx][ty]=='#')continue; if(ch<jz[tx][ty])ch=jz[tx][ty]; } } } } if(ch!=c)cout<<ch; return 0; }
|