从横向和纵向分别扫描,每一行或列记录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;
}

京公网安备 11010502036488号