题意:
两个数n,k找出一个数列有n个元素,元素和为k,并使a1|a2|a3....最大。
解析:
让二进制的一尽可能的多,即让第一个数的一最多,第二个数补齐和,后面用0补齐个数。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int a[N];
void slove(){
int n,k,sum=0,l;
cin>>n>>k;
if(n==1){
cout<<k<<"\n";
return ;
}
for(int i=1;i+sum<=k;i*=2){
sum+=i;
}
l=k-sum;
cout<<sum<<" "<<l<<" ";
for(int i=2;i<n;i++){
cout<<"0 ";
}
cout<<endl;
}
int main(){
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
int t;
cin>>t;
while(t--){
slove();
}
return 0;
}