题解:P9256 [PA 2022] Muzyka pop 2
题意解释
题目主要意思是让你构造一个严格递减的序列使它满足
题目思路
先把
然后用贪心的思维倒序枚举并去掉每个可以去掉的数。
最后把序列输出出来就好了。
题目标程
#include<bits/stdc++.h>
using namespace std;
inline int popcnt(int x) {
//计算 x 这个数在二进制下有多少个 1
int cnt = 0;
while (x) {
cnt += x & 1;
x >>= 1; //x /= 2
}
return cnt;
}
int n, m, sum = 0;
vector<int> DragonPig;
int main() {
scanf("%d", &n);
m = n;
while (m--) {
sum += popcnt(m + 1);//计算 1 ~ n 每个数在二进制下 1 的个数的和
}
for (int i = n; i >= 1; i--) {
if (sum - popcnt(i) >= n) {//判断能不能去掉
sum -= popcnt(i);
} else {
DragonPig.push_back(i);//不能去掉就把它加入序列
}
}
printf("%d\n", (int)DragonPig.size());
for (auto dragonpig : DragonPig) {
printf("%d ", dragonpig);
}
/*
用不了 auto 的可以这么写:
for (int i = 0; i < (int)DragonPig.size(); i++) {
printf("%d ", DragonPig[i]);
}
*/
return 0;//完结撒花!
}
这是本蒟蒻的第一篇题解,求过求过。