首页 > 代码库 > Codeforces Round #276 (Div. 2)C. Bits(构造法)
Codeforces Round #276 (Div. 2)C. Bits(构造法)
这道题直接去构造答案即可。
对于l的二进制表示,从右到左一位一位的使其变为1,当不能再变了(再变l就大于r了)时,答案就是l。
这种方法既可以保证答案大于等于l且小于等于r,也可以保证二进制表示时的1最多。
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<cmath>#include<map>#include<set>#include<vector>#include<algorithm>#include<stack>#include<queue>#include<cctype>#include<sstream>using namespace std;#define pii pair<int,int>#define LL long long intconst int eps=1e-8;const int INF=1000000000;const int maxn=10000+5;int n;LL l,r,p;int main(){ //freopen("in9.txt","r",stdin); //freopen("out.txt","w",stdout); scanf("%d",&n); while(n--) { scanf("%I64d%I64d",&l,&r); p=1; while(1) { if((l|p)>r) { printf("%I64d\n",l); break; } else { l|=p; p*=2; } } } //fclose(stdin); //fclose(stdout); return 0;}
Codeforces Round #276 (Div. 2)C. Bits(构造法)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。