站外题 ACW109 求助
  • 板块题目总版
  • 楼主rzh123
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/6/26 20:09
  • 上次更新2023/10/27 22:30:15
查看原帖
站外题 ACW109 求助
237530
rzh123楼主2022/6/26 20:09

题目

代码:

#include <bits/stdc++.h>
#define gc getchar()
#define pc(c) putchar(c)
#define int long long
using namespace std;
const int N=500007;
int n,m,t,a[N];
inline int read(){
	register int t=0;
	register char c=gc;
	while(c<'0'||c>'9') c=gc;
	while(c>='0'&&c<='9') t=10*t+(c^48),c=gc;
	return t;
}
void write(int x){
	if(x>=10){
        write(x/10);
    }
    pc((x%10)|48);
}
void merge(int l,int r,int mid){
	/*merge([l,mid],[mid+1,r])*/
	register int i=l,j=mid+1,k;
	static int b[N];
	for(k=l;k<=r;++k){
		if(j>r||(i<=mid&&a[i]<=a[j])){
			b[k]=a[i++];
		}
		else{
			b[k]=a[j++];
		}
	}
	for(k=l;k<=r;++k){
		a[k]=b[k];
	}
}
inline int sqr(int x){
	return x*x;
}
int calc(int l,int r,int k){
	int len=r-l+1,s=0;
	for(register int i=1;i<=k&&((i<<1)<=len);++i){
		s+=sqr(a[l+i-1]-a[r-i+1]);
	}
	return s;
}
void solve(){
	int l,r,p,s,rr,ans=0;
	n=read(),
	m=read(),
	t=read();
	for(register int i=1;i<=n;++i){
		a[i]=read();
	}
	l=r=1;
	p=1;
	while(r<=n){
		while(p){
			rr=r+p;
			sort(a+r+1,a+rr+1);
			if(rr>n){
				s=t+999;
			}
			else{
				merge(l,rr,r);
				s=calc(l,rr,m);
			}
			if(s<=t){
				r=rr;
				p<<=1;
			}
			else{
				p>>=1;
			}
		}
		l=r+1;
		r=l;
		p=1;
		++ans;
	}
	write(ans),
	puts("");
}
signed main(){
	int casecnt=read();
	while(casecnt--){
		solve();
	}
	return 0;
}

WA 了,请问有什么问题?

2022/6/26 20:09
加载中...