求调C,D,错一个点(
  • 板块学术版
  • 楼主gongziwen
  • 当前回复9
  • 已保存回复10
  • 发布时间2024/3/30 21:40
  • 上次更新2024/3/30 23:54:48
查看原帖
求调C,D,错一个点(
418739
gongziwen楼主2024/3/30 21:40

服了,这corner/killer点跟我有仇是吧

C题:

#include<bits/stdc++.h>
long long n,a,b,mn=1e18,mx=0;
int main()
{
	scanf("%lld%lld%lld",&n,&a,&b);
	for(int i=1;i<=n;i++)
	{
		long long x;
		scanf("%lld",&x);
		x%=(a+b);
		mx=std::max(mx,x);
		mn=std::min(mn,x);
	}
	puts(((mx-mn)<a)?"Yes":"No");
	return 0;
}

D题:

#include<bits/stdc++.h>
long long c,ansa,ansb;
int a,b,ans,x[66],A[66],B[66];
int main()
{
	scanf("%d%d%lld",&a,&b,&c);
	for(int i=0;i<=59;i++)
		if(c&(1ll<<i)) x[i]=1,ans++;
	int k=a+b-ans;
	if(a+b<ans||k%2==1||a<k/2||b<k/2) puts("-1");
	else
	{
		int flag=0;
		for(int i=0;i<=59;i++)
			if(!x[i]&&flag<k/2) a--,b--,flag++,A[i]=B[i]=1;
		for(int i=0;i<=59;i++)
			if(x[i]&&a) A[i]=1,a--;
		if(a==0)
		{
			for(int i=0;i<=59;i++)
				if(x[i]&&!A[i]&&b) b--,B[i]=1;
		}
		for(int i=0;i<=59;i++)
		{
			if(A[i]) ansa+=(1ll<<i);
			if(B[i]) ansb+=(1ll<<i);
		}
		printf("%lld %lld\n",ansa,ansb);
	}
	return 0;
}

2024/3/30 21:40
加载中...