求助 0pts.#11 ac,其余wa
查看原帖
求助 0pts.#11 ac,其余wa
975287
KDL_ANIPLEX楼主2024/7/15 16:26
#include<bits/stdc++.h>
using namespace std;

int n;
int s[100005][2];
int topp;

struct node{
	bool p;
	bool xb;
	int last,next;
	int sun;//|i-i.next|
	int id;
	int v;
}a[200005];

struct cmp{
	bool operator()(int f1,int f2){
		if (a[f1].sun!=a[f2].sun) return a[f1].sun>a[f2].sun;
		return f1>f2;
	}
};

priority_queue<int,vector<int>,cmp>q;

void in(){
	cin>>n;
	
	for (int i=1;i<=n;i++){
		a[i].id=i;
		char f;
		cin>>f;
		
		if(f=='G') a[i].xb=1;
		
		a[i].next=i+1,a[i].last=i-1,a[i].id=i;
	}
	
	for (int i=1;i<=n;i++){
		cin>>a[i].v;
		if (i>=2&&a[i-1].xb!=a[i].xb){
		a[i-1].sun=abs(a[i-1].v-a[i].v);
		q.push(i-1);
	}
	}

	return;
}

int main(){
	in();
	
	while (!q.empty()){
		int g=q.top();
		q.pop();
		int g2=a[g].next;
		int l=a[g].last;
		int r=a[g2].next;
		
		if (a[g].p==1||a[g2].p==1)
		continue;
	
		a[g].p=a[g2].p=1;
		topp++,s[topp][0]=g,s[topp][1]=g2;
		
		if (a[l].id>=1&&a[r].id<=n){
		a[l].next=r;
		a[r].last=l;
		if (a[l].xb!=a[r].xb){
			a[l].sun=abs(a[l].v-a[r].v);
			q.push(l);
		}
	}

	}
	
	cout<<topp<<endl;
	for (int i=1;i<=topp;i++)
	cout<<s[i][0]<<" "<<s[i][1]<<endl;
	
	return 0;
}

同学测了一下 好像会出现s[i][0]>s[i][1]

2024/7/15 16:26
加载中...