蒟蒻求助(洛谷月赛T2)
  • 板块学术版
  • 楼主Kio_
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/8/23 12:04
  • 上次更新2023/11/6 19:36:50
查看原帖
蒟蒻求助(洛谷月赛T2)
127925
Kio_楼主2020/8/23 12:04

(注:不知道是否能在讨论版发关于洛谷月赛题目的求助......如果不能还请大佬提醒一下,我马上自删。qwq)

当时提交的时候 其余全部 点都过了,但就差前面几个判断不合法数列的点没过

当时反复看了十几遍代码都没看出哪里错了......甚至最后怀疑是爆int了还把所有int都改成long long了,但还是没过 TAT

最后只能输出NO骗分了TAT

求大佬指教!!!QwQ

#include<cstdio>
#include<algorithm>
//#define int long long
//#define int int
using namespace std;
long long x[1000020];
long long n,k;
long long _max=-1,_min=214748364;
long long ans=-1;
long long minn(long long a,long long b)
{
	return a>b?b:a;
}
long long read()
{
	long long num=0;
	char c=getchar();
	while(c<'0'||c>'9')c=getchar();
	while('0'<=c&&c<='9')num=num*10+c-'0',c=getchar();
	return num;
}
int main()
{
	//scanf("%d %d",&n,&k);
	n=read(),k=read();
	for(long long i=1;i<=n;i++)
	{
		long long jx=read(),j=read();
		//scanf("%d %d",&jx,&j);
		x[jx]+=j;
		if(jx>_max)_max=jx;
		if(jx<_min)_min=jx;
	}
	
	bool flag=0;
	for(long long i=_max;i>=_min&&i-k>=0;i--)
	{
		if(x[i]!=0&&x[i-k]!=0)
		{
			
			long long num=minn(x[i],x[i-k]);
			//if(!((n==1&&x[i]<2)||(n==1&&k>0))){

			if(k==0&&x[i]>=2) {//若k==0且当前数列有>=2个数
				if(num*i>ans),ans=num*i;
				flag=1;
			}
			else//既然x[i]和x[i-k]都有值,则这个数列中数的个数一定>=2,就不用判断个数了
			if(num*(i+ i-k )>ans)
			{
				ans=num*(i+ i-k );
				flag=1;
			}
		}
	}
	
	if(flag==0)printf("NO");
	else
	printf("%lld",ans);
	return 0;
}
2020/8/23 12:04
加载中...