神奇的cerr
  • 板块学术版
  • 楼主Vitamin_B
  • 当前回复10
  • 已保存回复10
  • 发布时间2024/8/16 00:47
  • 上次更新2024/8/16 10:12:50
查看原帖
神奇的cerr
743373
Vitamin_B楼主2024/8/16 00:47

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
*/
2024/8/16 00:47
加载中...