AC了,但是在本地vs2022过不了
  • 板块P1878 舞蹈课
  • 楼主gamers
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/9/27 14:50
  • 上次更新2023/11/2 17:52:49
查看原帖
AC了,但是在本地vs2022过不了
379921
gamers楼主2023/9/27 14:50
#define _CRT_SECURE_NO_WARNINGS 1
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<queue>
using namespace std;
#define null NULL
#define ll long long
#define maxn 2000001
#define inf 1000000000
class node {
public:
	int l, r;
	int weight;
	node(int l, int r, int weight) {
		this->l = l;
		this->r = r;
		this->weight = weight;
	}
	bool operator<(const node& b)const {
		if (weight > b.weight) {
			return true;
		}
		if (weight == b.weight && l > b.l) {
			return true;
		}
		return false;
	}
};
class ans {
public:
	int l;
	int r;
	ans(int l, int r) {
		this->l = l;
		this->r = r;
	}
};
priority_queue<node>qu;
int n;
string x;
int num[maxn];
int before[maxn];
int after[maxn];
bool flag[maxn];
vector<ans>anss;
int main() {
	scanf("%d", &n);
	cin >> x;
	for (int i = 1; i <= n; ++i) {
		scanf("%d", &num[i]);
	}
	x += 'H';
	for (int i = 1; i <= n - 1; ++i) {
		if (x[i - 1] != x[i]) {
			qu.push(node(i, i + 1, abs(num[i] - num[i + 1])));
		}
	}
	for (int i = 1; i <= n; ++i) {
		before[i] = i - 1;
		after[i] = i + 1;
	}
	while (!qu.empty()) {
		node tmp = qu.top();
		qu.pop();
		int l = tmp.l;
		int r = tmp.r;
		if (flag[l] == false && flag[r] == false) {
			after[before[l]] = after[r];
			before[after[r]] = before[l];
			anss.push_back(ans(l, r));
			flag[l] = true;
			flag[r] = true;
			if (!flag[before[l]] && !flag[after[r]]) {
				if ((x[before[l] - 1] + x[after[r] - 1]) == ('G' + 'B')) {
					qu.push(node(before[l], after[r], abs(num[before[l]] - num[after[r]])));
				}
			}
		}
	}
	printf("%d\n", anss.size());
	for (int i = 0; i < anss.size(); ++i) {
		printf("%d %d\n", anss[i].l, anss[i].r);
	}
	return 0;
}

visual studio 2022在输入样例的时候显示字符数组越界,在加上越界条件判定之后本地可以过,但是oj上10分,如果把越界条件去掉,本地过不了,但是oj上ac了,求大佬帮助

2023/9/27 14:50
加载中...