真的是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