数据疑似过水
  • 板块P2390 地标访问
  • 楼主stylus
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/8 13:55
  • 上次更新2024/12/8 16:35:06
查看原帖
数据疑似过水
836448
stylus楼主2024/12/8 13:55

如你所见,这是一份AC代码。

#include<bits/stdc++.h>
#define int long long
using namespace std;
void read(int &x){
	x=0;bool f=0;char ch=getchar();
	while(ch>'9'||ch<'0'){
		if(ch=='-')f=1;
		ch=getchar();
	}do{x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}while(ch>='0'&&ch<='9');
	x=f?-x:x;
}
int n,t,a[50001],s,b;
signed main(){
	read(t),read(n);
	for(int i=1;i<=n;i++)read(a[i]);
	sort(a+1,a+1+n),s=lower_bound(a+1,a+1+n,0)-a;
	for(int i=s;i<=n&&a[i]<=t;i++){//往右跑,在回头去跑左边
		int j=max(0ll,t-a[i]*2);
		b=max(b,i-(upper_bound(a+1,a+1+n,-j)-a)+1);
	}for(int i=s-1;i>0&&-a[i]<=t;i--){//往左跑,再往右跑。
		int j=max(0ll,t+a[i]*2);
		b=max(b,(upper_bound(a+1,a+1+n,j)-a)-i);
	}cout<<b;
	return 0;
}

其中:

for(int i=s-1;i>0&&-a[i]<=t;i--){
    int j=max(0ll,t+a[i]*2);
    b=max(b,(upper_bound(a+1,a+1+n,j)-a)-i);
}

在文意理解中这才是正确的,但是这也能过。

for(int i=1;i<s&&-a[i]<=t;i++){
    int j=max(0ll,t+a[i]*2);
    b=max(b,(upper_bound(a+1,a+1+n,j)-a)-i);
}

求反对或同意。
详见:
1
2

2024/12/8 13:55
加载中...