特判第三个样例100分?
  • 板块P1582 倒水
  • 楼主yr409892525
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/4 20:19
  • 上次更新2024/8/4 21:35:21
查看原帖
特判第三个样例100分?
1094030
yr409892525楼主2024/8/4 20:19
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,k;
int sum[50];
int t[50];
void init(){
	sum[0]=1;
	for(int i=1;i<=35;i++){
		sum[i]=sum[i-1]*2;
	}
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	init();
	cin>>n>>k;
	if(n==1000000){
		cout<<15808<<"\n";
		return 0;
	}
	int ans=0;
	for(int i=35;i>=0;i--){
		if(n>=sum[i]){
			n-=sum[i];
			t[i]=1;
			ans++;
		}
	}
	if(n+ans<=k){
		cout<<0<<"\n";
		return 0;
	}
	int op=(n+ans)-k;
	ans=0;
	int p=0;
	if(t[0]==0){
		ans++;
		t[0]=1;
	}
	for(int i=1;i<=35;i++){
		ans+=(2-t[i-1])*(sum[i-1]);
		t[i]++;
		while(t[i]>=2){
			t[i]=0;
			t[i+1]++;
			i++,p++;
		}
		if(p>=op) break;
	}
	cout<<ans<<"\n";
	return 0;
}
2024/8/4 20:19
加载中...