3 条题解

  • -11
    @ 2024-11-18 13:39:57

    spq的闹腾代码

    #include<bits/stdc++.h>
    using namespace std;
    const int N=200005;
    long long k,kk,n,nn;
    long long ans[N];
    long long a[N];
    long long s[N];
    int cnt=0;
    long long res=0;
    int main(){
    	scanf("%lld",&n);
    	nn=n;
    	scanf("%lld",&k);
    	cnt=1;
    	while(k>=4*nn-4&&nn>1){
    		k-=4*nn-4;
    		a[nn/2]+=res*2+3*nn-1;
    		ans[n-cnt+1]=(res+nn+res+2*nn-1)*(nn-2)/2;
    		res+=4*nn-4;
    		ans[cnt]=(2*res-nn+3)*(nn-2)/2;
    		nn-=2;
    		cnt++;
    	}
    	if(nn==1&&k==1){
    		a[0]+=n*n;
    		k=0;
    	}
    	if(k>0){
    		for(int i=cnt;i<=n-cnt+1;i++){
    			res++;
    			ans[i]+=res;
    			k--;
    			if(k==0) break;
    		}
    		if(k>0){
    			for(int i=1;i<=nn-2;i++){
    				res++;
    				ans[n-cnt+1]+=res;
    				k--;
    				if(k==0) break;
    			}
    		}
    		if(k>0){
    			for(int i=n-cnt+1;i>=cnt;i--){
    				res++;
    				ans[i]+=res;
    				k--;
    				if(k==0) break;
    			}
    		}
    		if(k>0){
    			for(int i=1;i<=nn-2;i++){
    				res++;
    				ans[cnt]+=res;
    				k--;
    				if(k==0) break;
    			}
    		}
    	}
    	for(int i=n/2;i>=0;i--){
    		s[i]=s[i+1]+a[i];
    	}
    	for(int i=1;i<=n/2;i++){
    		cout<<s[n/2+1-i]+ans[i]<<" ";
    	}
    	for(int i=n/2+1;i<=n;i++){
    		cout<<s[n/2+1-(n+1-i)]+ans[i]<<" ";
    	}
    	return 0;
    }
    

信息

ID
16
时间
1000ms
内存
256MiB
难度
8
标签
(无)
递交数
58
已通过
10
上传者