题解:P12572 [UOI 2023] An Array and Addition Again
构造好玩捏!
我们发现通过增量操作我们可以轻易地将一个数翻倍。所以考虑递归当前数应为多少。但是如果当前数
可以发现每次递归实质上是消去了
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define add op.push_back(i)
vector<int> op;
void work(int i,int k){
if(k==1) return ;
if(k==2){add;return ;}
if(!(k%2)) add;
work(i+1,(k-1)/2); // k 为偶数时,(k-2)/2==(k-1)/2
add;add; // 将 a_i 赋值为 $a_{i+1}*2
}
signed main(){
int t,g;cin>>t>>g;
while(t--){
op.clear();
int n;cin>>n;
for(int i=99; i>=1; i--) add;
work(1,n);
cout<<op.size()<<"\n";
for(int x : op) cout<<x<<" ";
cout<<"\n";
}
return 0;
}