玄 学 错 误
查看原帖
玄 学 错 误
199459
Masna_Kimoyo楼主2021/2/2 22:15

我下载了第二个数据的测试点,标准答案是 2876928769 ,然后我把它的输入保存,放到桌面,再在代码里写了个freopenfreopen ,结果我的输出也是 2876928769 ,我雾了,这是为甚么?

代码:

#include<bits/stdc++.h>
using namespace std;
const int INF=2147483647,N=5e4+5;
int t,n,ans=-INF,a,lz,lf,max1,max2;
int z[N],f[N];
inline int read()
{
	int x=0;
	bool w=0;
	char c=getchar();
	while(!isdigit(c))
		w|=c,c=getchar();
	while(isdigit(c))
		x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return w?-x:x;
}
int main()
{
	//freopen("121212.txt","r",stdin);
	t=read(),n=read();
	for(register int i=1;i<=n;++i)
	{
		a=read();
		if(a>0)	
		{
			z[++lz]=a;
			if(a<=t)	max1=lz;
		}
		else	
		{
			f[++lf]=-a;
			if(-a<=t)	max2=lf;	
		}
	}
//	cout<<"lz "<<lz<<" lf "<<lf<<" max1 "<<max1<<" max2 "<<max2<<endl;
	sort(z+1,z+lz+1);
	sort(f+1,f+lf+1);
//	for(register int i=1;i<=lz;++i)
//		cout<<z[i]<<' ';cout<<endl;
//	for(register int i=1;i<=lf;++i)
//		cout<<f[i]<<' ';cout<<endl;
//	cout<<"l r mid i sum\n";
	for(register int i=1;i<=lz && i*2<=t;++i)
	{
		int l=0,r=lf,mid,tt=t-2*z[i],sum=i;
		while(l<=r)
		{
			mid=(l+r)>>1;
//			cout<<l<<' '<<r<<' '<<mid<<' '<<i;
			if(f[mid]>tt)	r=mid-1;
			else	if(f[mid]<tt)	l=mid+1,sum=mid+i;
			else	if(f[mid]==tt)	
			{
				sum=mid+i;
				break;	
			}	
//			cout<<' '<<sum<<endl;
		}
//		cout<<sum<<endl;
		ans=max(ans,sum);
	}
	for(register int i=1;i<=lf && i*2<=t;++i)
	{
		int l=0,r=lz,mid,tt=t-2*f[i],sum=i;
		while(l<=r)
		{
			mid=(l+r)>>1;
			if(f[mid]>tt)	r=mid-1;
			else	if(f[mid]<tt)	l=mid+1,sum=mid+i;
			else	if(f[mid]==tt)
			{
				sum=mid+1;
				break;
			}	
		}
		ans=max(sum,ans);
	}
	printf("%d",max(max(max1,max2),ans));
	return 0;
}

这是当时的情况/jk

2021/2/2 22:15
加载中...