Solution - P10270
Pursuewind · · 题解
一开始我以为是 BFS(虽然好像可以用 BFS 做),但是发现我把这道题想复杂了。
思路:
写在前面:设一个点
这道题解题的关键是从点
枚举答案
下面来证明一下:
如果有两个与
上面的
此时由于
为什么此时两条路径前面的
于是就可以得到代码了,复杂度 set 维护了互不相同的字符,其实不用这样,可以将复杂度优化至
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e3 + 5;
char c[N][N];
set <char> s;
signed main(){
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i ++){
for (int j = 1; j <= m; j ++){
cin >> c[i][j];
}
}
for (int d = 1; d < n + m; d ++){
s.clear();
for (int x = 1; x <= n; x ++){
int y = d - x + 1;
//此时(x,y)和(1,1)的距离是 d
if (y > 0 && y <= m) s.insert(c[x][y]);
}//x+y-1=d
if (s.size() != 1){
cout << d - 1 << "\n";
return 0;
}
}
cout << n + m - 1 << "\n"; //这里要注意,有可能整个矩阵的字符都相等,此时的答案为 n+m-1
return 0;
}