题解:AT_arc182_b [ARC182B] |{floor(A_i/2^k)}|
题意
给定两个正整数
思路
最大得分意味着你需要尽可能多的不同数值。从
简单模拟一下递归过程即可。
代码如下
#include <bits/stdc++.h>
using namespace std;
#define rep(i, l, r) for(int i = l; i <= r; ++ i)
#define per(i, r, l) for(int i = r; i >= l; -- i)
const int N = 1e5 + 5;
int n, k, x, tot, Q, a[N];
void dfs(int p,int s)
{
if(!s) return;
if(p * 2 >= 1 << k)
{
for(; s; -- s) a[++ tot] = p;
return;
}
dfs(p * 2, s / 2);
dfs(p * 2 + 1, s - s / 2);
}
main()
{
scanf("%d", &Q);
for(; Q; -- Q)
{
scanf("%d %d", &n, &k);
tot = 0;
dfs(1, n);
rep(i, 1, tot) printf("%d ", a[i]);
puts("");
}
return 0;
}