专栏文章
题解:P12707 [KOI 2021 Round 1] 橡皮擦
P12707题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mip4p5jq
- 此快照首次捕获于
- 2025/12/03 06:07 3 个月前
- 此快照最后确认于
- 2025/12/03 06:07 3 个月前
思路
观察示例,我们发现每次(B)操作其实就是在给每个数的格子号除以 ,根据这个结论,我们不难想到:对于一个正整数 ,对其不断整除,那一次其余数为 ,它就被删掉了。
进一步思考,对于一个正整数 ,我们可以求出它的二进制,从右往左数第一个 在第几位,这个数就会在第几轮被删除。
要想使一个数留到最后,这个数的二进制一定要仅有最高位是 且位数尽量高。最终,我们得出结论:留到最后的数一定是小于 的 的最大整数次幂。
理论结束,实践开始!
CPP进一步思考,对于一个正整数 ,我们可以求出它的二进制,从右往左数第一个 在第几位,这个数就会在第几轮被删除。
要想使一个数留到最后,这个数的二进制一定要仅有最高位是 且位数尽量高。最终,我们得出结论:留到最后的数一定是小于 的 的最大整数次幂。
理论结束,实践开始!
#include<bits/stdc++.h>
using namespace std;
int main() {
int n,x;
cin>>n;
x=log2(n);//函数的作用:求以2为底,n的对数
x=1<<x; //求小于N的2的最大整数次幂
cout<<x;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...