如果你45分而且是因为WA了一些奇奇怪怪的点……
查看原帖
如果你45分而且是因为WA了一些奇奇怪怪的点……
567387
TG178X楼主2023/1/4 12:41

那么请再检查一下你的初始化。

WA 45pts code:\texttt{WA 45pts code:}

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n,k,tot;
long long ans,d[maxn];
bool exist[maxn];
struct node{
	int l,r;
	long long d;
}rcd[maxn];
inline void del(int pos){
	rcd[rcd[pos].l].r=rcd[pos].r;
	rcd[rcd[pos].r].l=rcd[pos].l;
	return;
}
struct referer{
	long long d;
	int p;
};
inline bool operator<(referer x,referer y){
	if(x.d!=y.d) return x.d>y.d;
	else return x.p>y.p;
}
priority_queue<referer>q;
int main(){
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++) scanf("%lld",d+i);
	for(int i=n-1;i>=1;i--) d[i]-=d[i-1];
	for(int i=1;i<n;i++){
		rcd[++tot]=(node){i-1,i+1,d[i]};
//		exist[tot]=true;
		q.push((referer){d[i],i});
	}
	while(k--){
		while(exist[q.top().p]) q.pop();
		referer p=q.top();q.pop();
		ans+=rcd[p.p].d;
		rcd[p.p].d=rcd[rcd[p.p].l].d+
				   rcd[rcd[p.p].r].d-rcd[p.p].d;
		q.push((referer){rcd[p.p].d,p.p});
		exist[rcd[p.p].l]=exist[rcd[p.p].r]=true;
//		del(rcd[p.p].l);
//		del(rcd[p.p].r);
		rcd[p.p].l=rcd[rcd[p.p].l].l;
		rcd[p.p].r=rcd[rcd[p.p].r].r;
		rcd[rcd[p.p].l].r=p.p;
		rcd[rcd[p.p].r].l=p.p;
	}
	printf("%lld",ans);
	return 0;
}

调了好久愣是死活调不出来

直到我把 rcd[0] 初始化……

AC code:\texttt{AC code:}

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n,k;
long long ans,d[maxn];
bool exist[maxn];
struct node{
	int l,r;
	long long d;
}rcd[maxn];
struct referer{
	long long d;
	int p;
};
inline bool operator<(referer x,referer y){
	if(x.d!=y.d) return x.d>y.d;
	else return x.p>y.p;
}
priority_queue<referer>q;
int main(){
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++) scanf("%lld",d+i);
	for(int i=n-1;i>=1;i--){
		d[i]-=d[i-1];
//		cout<<d[i]<<endl;
	}
	d[0]=d[n]=LONG_LONG_MAX;
//	exist[0]=exist[n]=true;
	for(int i=1;i<n;i++){
		rcd[i]=(node){i-1,(i+1)%n,d[i]};
//		exist[tot]=true;
		q.push((referer){d[i],i});
	}
	rcd[0].d=rcd[n].d=1e16;
	while(k--){
		while(exist[q.top().p]) q.pop();
		referer p=q.top();q.pop();
		ans+=rcd[p.p].d;
		rcd[p.p].d=rcd[rcd[p.p].l].d+
				   rcd[rcd[p.p].r].d-rcd[p.p].d;
		q.push((referer){rcd[p.p].d,p.p});
		exist[rcd[p.p].l]=exist[rcd[p.p].r]=true;
//		del(rcd[p.p].l);
//		del(rcd[p.p].r);
		rcd[p.p].l=rcd[rcd[p.p].l].l;
		rcd[p.p].r=rcd[rcd[p.p].r].r;
		rcd[rcd[p.p].l].r=p.p;
		rcd[rcd[p.p].r].l=p.p;
//		cout<<ans<<endl;
	}
	printf("%lld",ans);
	return 0;
}
2023/1/4 12:41
加载中...