关于 __lg
  • 板块学术版
  • 楼主g1ove
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/11/13 21:47
  • 上次更新2024/11/14 02:31:00
查看原帖
关于 __lg
638537
g1ove楼主2024/11/13 21:47

同一份代码在 C++17 和 C++20 下表现出了不同情况,得到了 WA 和 AC 的成绩,观察应该是 __lg 抽风了,所以 __lg 为什么会错呢?

PS:不会出现 __lg(0) 的情况

#include<bits/stdc++.h>
#define N 8005
#define ll long long
using namespace std;
ll l,r,res;
int cut;
void mian()
{
	scanf("%lld%lld",&l,&r);
	if(l==r)
	{
		printf("1\n");
		return;
	}
	cut=__lg(l^r);
	const ll full=(1ll<<cut)-1;
	res=full-(full&l)+1;
	ll A=l&full,B=r&full;
	if(__lg(A)>__lg(B)) res+=((1ll<<__lg(B)+1))+res;
	else res+=full+1;
	printf("%lld\n",res);
}
int main()
{
	int _=1;
//	scanf("%d",&_);
	while(_--) mian();
	return 0;
}
2024/11/13 21:47
加载中...