3 条题解
-
-11
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
- 上传者