从横向和纵向分别扫描,每一行或列记录1的长度,Y横向有两张长度,纵向有三种长度,E和S横纵不同长度都是2,但E的四个角上有1,而S没有,通过这个分辨出来E还是S即可
#include <bits/stdc++.h> #define int long long #define endl '\n' #define sz(x) x.size() #define lbt(x) (x)&(-x) #define all(x) x.begin(),x.end() #define rep(i,n) for(int i=0;i<n;i++) using namespace std; typedef pair<int, int> PII; typedef double db; const int N = 2e5 + 10, mod = 998244353, inf = 0x3f3f3f3f; const db EPS = 1e-9; string s[N]; void solve() { int n = 0; string p; while (cin >> p) { s[++n] = p; } set<int>x, y; int a = 2e9, b = 0, c = 2e9, d = 0; int m = p.size(); for (int i = 1; i <= n;i++) { int tmp = 0; for (int j = 0;j < m;j++) { if (s[i][j] == '1') { tmp++; a = min(a, i); b = max(b, i); c = min(c, j); d = max(d, j); } } if (tmp)x.insert(tmp); } for (int i = 0; i < m;i++) { int tmp = 0; for (int j = 1;j <= n;j++) { if (s[j][i] == '1')tmp++; } if (tmp >= 1)y.insert(tmp); } if (x.size() == y.size()) { if (s[a][c] == '1' && s[a][d] == '1' && s[b][c] == '1' && s[b][d] == '1')cout << "E" << endl; else cout << "S" << endl; } else cout << "Y" << endl; } signed main() { cin.tie(0)->sync_with_stdio(0); cout.tie(0); int _ = 1; // cin >> _ ; while (_--) solve(); return 0; }