关于sort
  • 板块学术版
  • 楼主__frj
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/7/29 22:09
  • 上次更新2023/10/27 17:46:56
查看原帖
关于sort
89338
__frj楼主2022/7/29 22:09

CF1214E 我将sort cmp函数由改为后,AC->WA on test#7

要得到单调不增的序列,看起来好像是等价的,求助为什么一个WA一个AC

附上代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;


int read(){
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return x*f;
}
const int N = 5e5+4; 
struct D{
	int d,id;
}e[N];
int n,u[N],v[N],f[N],tot=0,ans[N];
bool cmp(D x,D y){
	return x.d > y.d;
}
int main(){
	n = read();
	for(int i=1;i<=n;i++){
		e[i].d = read() , e[i].id = i;
	}
	sort(e+1,e+n+1,cmp);
	for(int i=1;i<=n;i++){
		ans[i*2-1] = e[i].id * 2 - 1;
		ans[i*2] = e[i].id  * 2;
	}
	for(int i=1;i<n;i++){//连i*2-1 000000
//		cout << e[i].id*2-1<<' '<<e[i].id*2+1<<endl;  
		u[++tot] = i*2-1;v[tot] = i*2+1;
	}
	 
	int cnt = 0;
	for(int i=1;i<=n;i++){
		f[++cnt] = i*2-1;
	}
	for(int i=1;i<=n;i++){//连i*2 
		if(cnt - i + 1 == e[i].d){
			u[++tot] = f[cnt] , v[tot] = i*2;
			f[++cnt] = i*2; 
		}
		else{
			u[++tot] = f[e[i].d+i-1],v[tot] = i*2;
		}   
	}
	for(int i=1;i<=2*n-1;i++){
		printf("%d %d\n",ans[u[i]],ans[v[i]]);
	}
	
	return 0;
}
2022/7/29 22:09
加载中...