CF2147I2
xujindong_ · · 题解
有简单的爆标做法,轻松构造出
核心思路是有两个块
现在我们需要构造块间的转移。考虑倍增两个块的距离,比如设第
现在已经可以构造出
#include<bits/stdc++.h>
using namespace std;
const int d=12,bn=48,blen=290;
const long long inf=1e18;
int n,m,cnt;
long long p[bn+5][blen+5];
void out(long long x){
cout<<x<<' ';
if(!--n)exit(0);
}
int main(){
cin>>n>>m;
if(n==8&&m==6)return puts("1 1 3 6 10 3 11 1"),0;
for(int i=1;i<=bn;i++)for(int j=0;j<=blen;j++)p[i][j]=(1ll<<(i+d))+j*5-inf;
for(int i=3;i<=bn;i++){
for(int j=i-2;j>=1;j--){
long long mid=(p[j][blen]+p[i][0])/2;
out(p[i][0]);
for(int k=1;k<=blen;k++)out(mid+1),out(p[j][blen-k+1]),out(mid+2),out(p[i][k]);
out(2*p[i][blen]-mid-1);
}
}
return 0;
}