求助(全部TLE)
查看原帖
求助(全部TLE)
467890
lcx132432432楼主2021/10/20 21:26

样例过了但提交上去全部TLE QAQ

#include<bits/stdc++.h>
using namespace std;
struct node{
	int le;
	int rg;
	int cha;
	friend bool operator<(node e,node t){
		if(e.cha==t.cha){
			return e.le<t.le;
		}
		else{
			return e.cha>t.cha;
		}
	}
};
priority_queue<node>q;
const int MAX=200005;
string s;
int n,a[MAX],b[MAX],vis[MAX],dan1[MAX],dan2[MAX],tot;
inline int read()
{
    int x=0;
	bool f=false;
	char g=getchar();
    for(;!isdigit(g);g=getchar())if(g=='-')f=true;
    for(;isdigit(g);g=getchar())x=(x<<3)+(x<<1)+(g^48);
    if(f)return -x;
    return x;
}
int main(){
	n=read();cin>>s;
	for(int i=1;i<=n;i++){
		if(s[i-1]=='B')a[i]=1;
		else a[i]=0;
	}
	for(int i=1;i<=n;i++){
		b[i]=read();
	}
	for(int i=1;i<n;i++){
		if(a[i]!=a[i+1]){
		    q.push((node){i,i+1,abs(b[i+1]-b[i])});
		}
	}
	while(!q.empty()){
		int x=q.top().le;
		int y=q.top().rg;
		q.pop();
		if(!vis[x]&&!vis[y]){
			vis[x]=1;vis[y]=1;
			dan1[++tot]=x;dan2[tot]=y;
		}
		while(x>0&&vis[x])x--;
		while(y<=n&&vis[y])y++;
		if(a[x]!=a[y])q.push((node){x,y,abs(b[x]-b[y])});
	}
	printf("%d\n",tot);
	for(int i=1;i<=tot;i++){
		printf("%d %d\n",dan1[i],dan2[i]);
	}
	return 0;
}

请各位dalao救救孩子吧

2021/10/20 21:26
加载中...