求助
  • 板块灌水区
  • 楼主jr_inf
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/10/10 20:39
  • 上次更新2023/11/4 04:07:24
查看原帖
求助
290055
jr_inf楼主2021/10/10 20:39

RT,本人写的堆编译不通过

可能是我太弱了

code:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1e5+1;
int n,b[N],ans[N][2],cnt;
char a[N];
bool f[N];
struct node{
	int x,y;
	bool operator<(node a) const{
		if(abs(b[x]-b[y])!=abs(b[a.x]-b[a.y]))return abs(b[x]-b[y])<abs(b[a.x]-b[a.y]);
		return x<a.x;
	}
};
priority_queue<int,vector<node>,greater<node> > q;
int main()
{
	scanf("%d%s",&n,a+1);
	for(int i=1;i<=n;i++)scanf("%d",&b[i]);
	for(int i=1;i<n;i++)if(a[i]!=a[i+1])q.push((node){i,i+1});
	while(!q.empty())
	{
		node t=q.top();
		q.pop();
		if(f[t.x]||f[t.y])continue;
		f[t.x]=f[t.y]=1,cnt+=1,ans[cnt][0]=t.x,ans[cnt][1]=t.y;
		if(a[t.x-1]!=a[t.y+1]&&t.x>1&&t.y<n)q.push((node){t.x-1,t.y+1});
	}
	for(int i=1;i<=cnt;i++)
	{
		for(int j=0;j<2;j++)printf("%d ",ans[i][j]);
		printf("\n");
	}
}
2021/10/10 20:39
加载中...