钉子精神
查看原帖
钉子精神
100325
peterwuyihong楼主2020/8/27 17:31
#include<bits/stdc++.h>
using namespace std;
#define debug(x) cerr<<#x<<' '<<x<<endl
#ifndef ONLINE_JUDGE
	#define fuck getchar
#else
	#define fuck nc
#endif
char nc(){
  	static char buf[1<<25],*p=buf,*q=buf;
  	if(p==q&&(q=(p=buf)+fread(buf,1,1<<25,stdin),p==q))return EOF;
  	return *p++;
}
template<class T>void read(T&x){
	short f=1;x=0;
	char ch=fuck();
	while(!isdigit(ch)){
		if(ch=='-')f=-1;
		ch=fuck();
	}while(isdigit(ch)){
		x=(x<<1)+(x<<3)+(ch^48);
		ch=fuck();
	}x*=f;
}
template<class T>void write(T x){
	if(x<0)putchar('-'),x=-x;
	if(x>=10)write(x/10);
	putchar(x%10+48);
}

#define maxn 2000010
#define int long long
int n,k;
int x,y;
int b[maxn];
int ans=LLONG_MIN;
signed main(){
#ifndef ONLINE_JUDGE
	freopen("testdata.in","r",stdin);
#endif
	read(n),read(k);
	for(int i=1;i<=n;i++){
		read(x),read(y);
		b[x]+=y;
	}
	for(int i=1000000;i>=k;i--)
	if(b[i]&&b[i-k]){
		if(k==0&&b[i]>1)ans=max(ans,b[i]*i);
		else ans=max(ans,min(b[i],b[i-k])*(2*i-k));
	}
	if(ans==LLONG_MIN)puts("NO");
	else write(ans);
}

RTRT

我用b[i] and b[ik]b[i]\ and\ b[i-k]判断有没有可能无解为什么会挂掉???

导致我比赛的时候另外记录了一个aa数组再排序一下两两比较特判无解,也就是说我这样才AA

for(int i=1;i<=n;i++){
	read(x),read(y);
	a[i]=x;
	b[x]+=y;
}
sort(a+1,a+n+1);
bool flag=1,did=0;
for(int i=1;i<n;i++)
if(a[i+1]-a[i]==k)flag=0,did=1;
if(flag&&did)return puts("NO"),0;

这是什么原理啊好奇怪啊

快读的写法就暂且不要管了方便调试

2020/8/27 17:31
加载中...