社区讨论

WA on #9 求条必关

P2390地标访问参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mlnoahm6
此快照首次捕获于
2026/02/15 19:39
4 天前
此快照最后确认于
2026/02/16 14:40
3 天前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
//至多折返1次。折返2次必有重复区域,非最优。
const int maxn=5e4+1;
int a[maxn];
int main(){
	//ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int n,t;
	cin>>t>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	sort(a,a+n);
	//cout<<"Sorted array:\n";for(int i=0;i<n;i++)cout<<a[i]<<" ";
	//cout<<endl;
	/*
	 * 4种情况
	 * 1. 一直左
	 * 2. 一直右
	 * 3. 先左后右
	 * 4. 先右后左
	*/
	//枚举折返点的3、4情况
	//先右后左
	//cout<<"先右后左"<<endl;
	int ans_xyhz=0;
	for(int i=0;i<n;i++){
		int tempa=a[i];
		if(a[i]<0)continue;
		else{
			int arrivea=2*tempa-t;
			ans_xyhz=max(ans_xyhz,int(lower_bound(a,a+n,tempa)-upper_bound(a,a+n,arrivea)+1));
			//printf("tempa=%d,arrivea=%d,ans=%d\n",tempa,arrivea,ans_xyhz);
		}
	}
	//先左后右
	//cout<<"先左后右"<<endl;
	int ans_xzhy=0;
	for(int i=0;i<n;i++){
		int tempa=a[i];
		if(a[i]>0)continue;
		else{
			int arrivea=t+2*tempa;
			ans_xzhy=max(ans_xzhy,int(lower_bound(a,a+n,arrivea)-upper_bound(a,a+n,tempa)+1));
			//printf("tempa=%d,arrivea=%d,ans=%d\n",tempa,arrivea,ans_xzhy);
		}
	}
	//一下无需枚举折返点
	//一直左
	//cout<<"一直左"<<endl;
	int ans_yzz=0;
	int arrivea_yzz=-t;
	ans_yzz=lower_bound(a,a+n,0)-upper_bound(a,a+n,arrivea_yzz);
	//printf("arrivea=%d,ans=%d\n",arrivea_yzz,ans_yzz);
	//一直右
	//cout<<"一直右"<<endl;
	int ans_yzy=0;
	int arrivea_yzy=t;
	ans_yzy=lower_bound(a,a+n,arrivea_yzy)-upper_bound(a,a+n,0);
	//printf("arrivea=%d,ans=%d\n",arrivea_yzy,ans_yzy);
	//cout<<"Final Answer is: ";
	cout<<max(ans_xyhz,max(ans_xzhy,max(ans_yzz,ans_yzy)));
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...