八月月赛

八月月赛

P6745 Number

image-20200808202427388

#include<bits/stdc++.h>
using namespace std;

#define ll long long

ll k,x,a[555];

int main()
{
	scanf("%lld %lld",&k,&x);
	a[k+1]+=1;
	while(x)
	{
		a[++a[0]]+=x%10;
		x/=10;
		if(a[a[0]]>=10) a[a[0]]%=10,a[a[0]+1]+=1;
	}
	
	if(a[a[0]+1]) a[0]++;
	a[0]=max(a[0],k+1);
	
	for(int i=a[0];i;i--) cout<<a[i];
}

P6746 Operations

image-20200808202526193

image-20200808202546061

image-20200808202602021

#include<bits/stdc++.h>
using namespace std;

#define ll long long
ll a,b,c,d;

int main()
{
	cin>>a>>b>>c>>d;
	
	if(a==0&&b==0) cout<<0;
	else if(a==0||b==0) cout<<d;
	else if(a==b) cout<<min(c,d*2);
	else cout<<min(c+d,d*2);
}

P6747 Teleport

image-20200808202713951

image-20200808202727325

image-20200808202801731

image-20200808202820425

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=70;
const ll P=pow(2,50);
ll n,a,q,K,jz,S,cnt[N][2];


int main()
{	
	scanf("%lld",&n);
	while(n--)
	{
		scanf("%lld",&a);
		for(int i=0;i<=50;++i) cnt[i][a>>i&1]++;
	}
	
	jz=1;
	for(int i=0;i<=50;++i,jz<<=1)
	if(cnt[i][0]<=cnt[i][1]) K+=jz,S+=jz*cnt[i][0];
	else S+=jz*cnt[i][1];
	
	scanf("%lld",&q);
	while(q--)
	{
		scanf("%lld",&a);
		if(a<S)
		{
			printf("-1\n");
			continue;
		}
		
		ll ans=K,sum=S;
		jz=P;
		
		for(int i=50;i>=0;--i,jz>>=1)
		{
			ll val=sum+jz*(cnt[i][0]-cnt[i][1]);
			if(!(ans>>i&1)&&val>0&&val<=a) ans+=jz,sum=val;
		}
		
		printf("%lld\n",ans);
	}
	
}
posted @ 2020-10-23 20:59  林生。  阅读(56)  评论(0)    收藏  举报