社区讨论

代码特性

P12419 【MX-X12-T2】「ALFR Round 5」Dream of Sky参与者 3已保存回复 9

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
9 条
当前快照
1 份
快照标识符
@mewmcvsu
此快照首次捕获于
2025/08/29 17:17
6 个月前
此快照最后确认于
2025/11/03 23:43
4 个月前
查看原帖
在函数fack(4~11行)中 len的长度上限为什么无论是多长的数字都为10啊
CPP
#include<bits/stdc++.h>
using namespace std;
const long long inf = 5e8+10;
int fack(int a){  //获取二进制数字位数
	int k=0;
	while(true){
		a/=10;
		k++;
		if(a==0)return k;
	}
}
int twoten(int a){//将二进制转为十进制
	int sum=0;
	int len=fack(a);
	for(int i=0;i<len;i++){
		sum+=(a%10)*pow(2,i);
		a/=10;
	}
	
	return sum;
}
int weight(int n){//计算权值
	int ki=0,ans=0;
	int a[600000]={};
	memset(a,0x7f7f,sizeof(a));
	while(n>0){
		a[++ki]=n%2;
		n/=2;
		if(a[ki]!=a[ki-1]){
			ans++;
		}
	}
	return ans;
}
int baseans(int l, int r){//范围最小权值
	int nb=-1;
	int x=twoten(l),y=twoten(r);
	int MIN=inf;
	for(int i=x;i<=y;i++){
		nb=weight(i);
		if(nb<MIN){
			MIN=nb;
		}
	}
	return MIN;
}
int main(){
	int T;
	cin>>T;
	/*测试*/
//	cout<<"twoten:"<<twoten(T)<<endl;
//	cout<<"weight:"<<weight(twoten(T))<<endl;  
//	cout<<"fac:"<<fac(T)<<endl;

	while(T>0){
		int l,r;
		cin>>l>>r;
		cout<<baseans(l,r)<<endl;
		T--;
	}
	
	return 0;
}
对于fack()
in:110110110110
out:10

回复

9 条回复,欢迎继续交流。

正在加载回复...