WA 求 hack
查看原帖
WA 求 hack
906057
ELECTRODE_kaf楼主2024/10/21 21:15

p 存储位置,d 存储能走的距离,cnt1[i] 存储 1 到 i 的割草机中方向向左的数量,vis1[i] 表示从左往右割草,1 到 i 中能与前一个割草机“对接”的数量。

求 hack 或调试!!谢谢QAQ

#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define rep(i,x,y) for(ll i=x;i<=y;i++)
#define pause system("pause")

const ll N=1e5+10;
ll n,p[N],d[N],cnt1[N],cnt2[N],vis1[N],vis2[N];
short dir[N];

int main(){
	cin>>n;
	
	rep(i,1,n) cin>>p[i]>>d[i]>>dir[i];
	
	vis1[1]=vis2[n]=1;
	cnt1[1]=(dir[1]==-1);
	cnt2[n]=(dir[n]==1);
	
	rep(i,2,n){
		cnt1[i]=cnt1[i-1]+(d[i]==-1);
		vis1[i]=vis1[i-1]+(p[i-1]+d[i-1]>=p[i]);
	}
	
	for(ll i=n-1;i>0;i--){
		cnt2[i]=cnt2[i+1]+(d[i]==1);
		vis2[i]=vis2[i+1]+(p[i+1]-d[i+1]<=p[i]);
	}
	
	ll ans=INT_MAX;
	
	if(vis1[n]==n) ans=min(ans,cnt1[n-1]);
	
//	cout<<ans<<'\n';
	
	if(vis2[1]==n) ans=min(ans,cnt2[2]);
	
//	cout<<ans<<'\n';
	
	rep(i,1,n-1){
		if(cnt1[i]==i&&cnt2[i+1]==n-i-1&&p[i]+d[i]+d[i+1]>=p[i+1]) ans=min(ans,cnt1[i]+cnt2[i+1]);
	}
	
	if(ans<INT_MAX) cout<<ans;
	else cout<<-1;
}
2024/10/21 21:15
加载中...