玄关,求助
查看原帖
玄关,求助
691315
SNXL楼主2024/8/10 18:12

一直40pts,求助

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 10;
int T;
int n, m;
int p, x;
int a[N], b[N];
bool vis[N];
bool ok;
int pos1, pos2;
bool check(int i) {
	if (!vis[i] || !vis[i+1] || !vis[i+2] || !vis[i+3]) return true;
	return false;
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr); cout.tie(nullptr);
	cin >> T;
	while (T--) {
		memset(vis, false, sizeof(vis));
		memset(b, 0, sizeof(b));
		memset(a, 0, sizeof(a));
		pos1 = pos2 = 0;
		ok = false;
		cin >> n >> m;
		if (m == 1 || m == 0) {
			cout << "Yes\n";
			continue;
		}
		for (int i=1; i<=m; i++) {
			cin >> p >> x;
			a[p] = x;
			vis[p] = true;
		}
		for (int i=1; i<=n; i++) {
			if (vis[i] != 0 && !pos1) {
				pos1 = i;
				continue;
			}
			if (vis[i] != 0 && !pos2) {
				pos2 = i;
			}
		}
		if (pos1 == pos2) {
			cout << "Yes\n";
			continue;
		}
		int d = (a[pos2] - a[pos1]) / (pos2 - pos1);
		b[pos1] = a[pos1];
		b[pos2] = a[pos2];
		for (int i=pos1-1; i >= 1; i--) {
			if (!vis[i]) {
				a[i] = a[i+1] - d;
			}
			b[i] = b[i+1] - d;
		}
		for (int i=pos1+1; i<=n; i++) {
			if (!vis[i]) {
				a[i] = a[i-1] + d;
			}
			b[i] = b[i-1] + d;
		}
		for (int i=1; i<=n; i++) {
			if (a[i] == b[i]) continue;
			ok = true;
			break;
		}
		if (ok) {
			cout << "No\n";
		} else {
			cout << "Yes\n";
		}
	}
	return 0;
}
2024/8/10 18:12
加载中...