rt,在这份代码中加上任意一个cerr(哪怕是没有执行到的地方)就会正常运行输出4(指末尾的in),否则re或输出-1?
# 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 I return
# define AK 0
# define IOI ;
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
const int inf = 1e9;
int T, n, m, minx, s, t;
string a[200005];
vector <int> v[10];
bitset <4> vis[200005];
int check (const int s, const int t, const int col, const int id) {
// cerr << s << '~' << t << ':' << col << ',' << id << '=' << abs (s - v[col][id]) + abs (t - v[col][id]) << '\n';
return abs (s - v[col][id]) + abs (t - v[col][id]);
}
int search (const int s, const int t, const int col) {
if (v[col].empty ())
return inf;
int minx = inf, l, r = v[col].size () - 1, mid1, mid2;
// cerr << l << '~' << r << ',' << col << '\n';
while (r - l >= 3) {
mid1 = l + (r - l) / 3, mid2 = mid1 + (r - l) / 3;
// cerr << l << '~' << r << ':' << mid1 << ',' << mid2 << '\n';
if (check (s, t, col, mid1) > check (s, t, col, mid2))
l = mid1;
else
r = mid2;
}
for (int i = l; i <= r; ++ i)
minx = min (minx, check (s, t, col, i));
return minx;
}
bool f (int a, int b, int c, int d) {
return a == c && b == d || a == d && b == c;
}
int main () {
ios::sync_with_stdio (0);
cin.tie (0);
cout.tie (0);
cin >> T;
while (T --) {
//BGRY
for (int i = 0; i < 7; ++ i)
v[i].clear ();
cin >> n >> m;
for (int i = 1; i <= n; ++ i) {
cin >> a[i];
vis[i][0] = (a[i][0] == 'B' || a[i][1] == 'B');
vis[i][1] = (a[i][0] == 'G' || a[i][1] == 'G');
vis[i][2] = (a[i][0] == 'R' || a[i][1] == 'R');
vis[i][3] = (a[i][0] == 'Y' || a[i][1] == 'Y');
v[a[i] == "BG" ? 0 : a[i] == "BR" ? 1 : a[i] == "BY" ? 2 : a[i] == "GR" ? 3 : a[i] == "GY" ? 4 : 5].emplace_back (i);
}
while (m --) {
cin >> s >> t;
if ((vis[s]&vis[t]) != 0)
cout << abs (s - t) << '\n';
else {
minx = inf;
for (int i = 0; i < 4; ++ i)
if (vis[s][i])
for (int j = 0; j < 4; ++ j)
if (vis[t][j])
minx = min (minx, search (s, t, f (i, j, 0, 1) ? 0 : f (i, j, 0, 2) ? 1 : f (i, j, 0, 3) ? 2 : f (i, j, 1, 2) ? 3 : f (i, j, 1, 3) ? 4 : 5));
cout << (minx < inf ? minx : -1) << '\n';
}
}
}
I AK IOI
}
/*
1
4 1
BR BR GY GR
3 1
*/