Fork me on GitHub

和之大题解

1111... = 2^n-1
长度为n的都是1的二进制数 = 2的n次方-1

思路:对于每个数只有选或不选(1或0)的二进制,剩余见代码

点击查看代码
#include<bits/stdc++.h>
using namespace std;
long long f[20];
int main(){
	freopen("202409C.in","r",stdin);
	freopen("202409C.out","w",stdout);
	long long n,m;
	cin>>n>>m;
	f[0]=1;
	for(long long i=1;i<n;i++){
		f[i]=f[i-1]*7;//预处理
	}
	long long cnt=pow(2,n)-m;//一个观点:pow(2,n)-m表示一个长度为n的二进制数的第m大
	long long ans=0;
	for(int i=0;i<n;i++){
		ans+=((cnt>>i)&1)*f[i];//将二进制中为1的对应数相加
	}
	cout<<ans;
	return 0; 
}
posted @ 2024-09-18 16:43  zjr20120321  阅读(15)  评论(0)    收藏  举报