代码:
//# pragma GCC optimize("Ofast,no-stack-protector")
//
//# pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
# include <bits/stdc++.h>
# define reg register
typedef long long ll;
using namespace std;
# define x a[i][j]
int n, m, l[30], r[30], d[30], u[30], du[30], a[35][35], tot;
string s, ans;
bool vis[30][30], f[30];
void dfs (int step) {
// cout << ans << ':' << du[2] << '\n';
if (step >= tot) {
cout << ans << '\n';
return ;
}
for (reg int i = 0; i < 26; ++ i)
if (f[i] && ! du[i]) {
for (reg int j = 0; j < 26; ++ j)
if (vis[i][j])
-- du[j];
ans[step] = i + 'A';
f[i] = 0;
dfs (step + 1);
f[i] = 1;
for (reg int j = 0; j < 26; ++ j)
if (vis[i][j])
++ du[j];
}
return ;
}
int main () {
ios::sync_with_stdio (0);
cin.tie (0);
cout.tie (0);
// freopen ("frame.in", "r", stdin);
//
// freopen ("frame.out", "w", stdout);
cin >> n >> m;
for (reg int i = 0; i < 26; ++ i)
u[i] = l[i] = 114514;
for (int i = 0; i < n; ++ i) {
cin >> s;
for (int j = 0; j < m; ++ j)
if (s[j] != '.') {
a[i][j] = s[j] - 'A';
if (! f[x])
f[x] = 1, ++ tot;
l[x] = min (l[x], j);
r[x] = max (r[x], j);
if (u[x] > n)
u[x] = i;
d[x] = i;
} else
a[i][j] = -1;
}
for (reg int i = 0; i < 26; ++ i)
if (f[i]) {
for (reg int j = l[i]; j <= r[i]; ++ j) {
if (~ a[u[i]][j] && ! vis[i][a[u[i]][j]] && a[u[i]][j] != i)
vis[i][a[j][u[i]]] = 1;
if (~ a[d[i]][j] && ! vis[i][a[d[i]][j]] && a[d[i]][j] != i)
vis[i][a[j][d[i]]] = 1;
}
for (reg int j = u[i] + 1; j < d[i]; ++ j) {
if (~ a[j][l[i]] && ! vis[i][a[j][l[i]]] && a[j][l[i]] != i)
vis[i][a[j][l[i]]] = 1;
if (~ a[j][r[i]] && ! vis[i][a[j][r[i]]] && a[j][r[i]] != i)
vis[i][a[j][r[i]]] = 1;
}
}
for (reg int i = 0; i < 26; ++ i)
if (f[i])
for (reg int j = 0; j < 26; ++ j)
du[i] += vis[j][i];
// for (reg int i = 0; i < 5; ++ i, cout << '\n') for (reg int j = 0; j < 5; ++ j) cout << vis[i][j] << ' ';
ans.resize (tot, '.');
// for (reg int i = 0; i < 5; ++ i) cout << "du[" << i << "]=" << du[i] << '\n';
dfs (0);
return 0;
}
第7个数据.in:
30 30
...............OOOOO..........
...............O...O..........
...............O...O..........
...............O...O..........
...............O...O..........
...............O...O..........
...............O...O..........
EEEEEEEEEEEEEEEOEEEOEEEEEEEEEE
E..............OOOOO.........E
E............................E
EEIIUUUUUUUUUUUUUUUUUUUUUUUUEE
..I.U...I..............AAAAUA.
..I.U...I..............A...UA.
..I.U...I..............A...UA.
..I.UUUUUUUUUUUUUUUUUUUUUUUUA.
..I.....I..............A....A.
..I.....I..............A....A.
..I.....I..............AAAAAA.
..I.....I.....................
..I.....I.....................
..I.....I.....................
..IIIIIII.....................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
..............................
第7个数据.out
AEIOU
AEIUO
AEOIU
EAIOU
EAIUO
EAOIU
EIAOU
EIAUO
EIOAU
EOAIU
EOIAU
我输出为空?