求问CSP-S完善程序第一空
  • 板块灌水区
  • 楼主llzer
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/9/25 09:34
  • 上次更新2023/10/27 10:03:07
查看原帖
求问CSP-S完善程序第一空
85429
llzer楼主2022/9/25 09:34

真的是D吗,为啥我DBCCA写出来随便造了几组数据就能卡掉啊,代码如下:

#include<bits/stdc++.h>
#define For(i,l,r) for(int i=(l);i<=(r);++i)
#define ReFor(i,r,l) for(int i=(r);i>=(l);--i)
#define I inline
const int N=5010;
using namespace std;
int n,k;
int a1[N],a2[N];
int solve(int *a1,int *a2,int n,int k)
{
	int left1=0,right1=n-1;
	int left2=0,right2=n-1;
	while(left1<=right1 && left2<=right2)
	{
		int m1=(left1+right1)>>1;
		int m2=(left2+right2)>>1;
		int cnt=(m1+1)+(m2+1);
		if(a1[m1]<=a2[m2])
		{
			if(cnt<k)
				left1=m1+1;
			else right2=m2-1;
		}
		else
		{
			if(cnt<k)
				left2=m2+1;
			else right1=m1-1;
		}
	}
	if(left1>right1)
	{
		if(left1==0)
		{
			return a2[k-1];
		}
		else
		{
			int x=a1[left1-1],y=a2[k-left1-1];
			return std::max(x,y);
		}
	}
	else
	{
		if(left2==0)
		{
			return a1[k-1];
		}
		else
		{
			int x=a2[left2-1],y=a1[k-left2-1];
			return std::max(x,y);
		}
	}
}
int main()
{
	scanf("%d%d",&n,&k);
	For(i,0,n-1)
		scanf("%d",&a1[i]);
	For(i,0,n-1)
		scanf("%d",&a2[i]);
	int ans=solve(a1,a2,n,k);
	printf("%d",ans);
	return 0;
}

数据如下:

输入
3 2
1 3 5
2 4 6
应输出2,但程序输出3

2022/9/25 09:34
加载中...