70分蒟蒻求助
查看原帖
70分蒟蒻求助
762019
yushanxuanfeng楼主2023/11/17 14:13
#include<bits/stdc++.h>
#define N 300005
using namespace std;
struct A{int x,y,id;}a[N];
bool cmpx(A c,A d){return c.y!=d.y?c.y<d.y:c.x<d.x;}
bool cmpy(A c,A d){return c.x!=c.x?c.x<d.x:c.y<d.y;}
int n,s=1e9,t=-1e9,ans=1e9;
string str;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>str;
	a[0].x=260000,a[0].y=260000;
	for(int i=1;i<=n;i++){
		a[i].id=i;
		if(str[i-1]=='N') a[i].x=a[i-1].x,a[i].y=a[i-1].y+1;
		if(str[i-1]=='S') a[i].x=a[i-1].x,a[i].y=a[i-1].y-1;
		if(str[i-1]=='W') a[i].x=a[i-1].x-1,a[i].y=a[i-1].y;
		if(str[i-1]=='E') a[i].x=a[i-1].x+1,a[i].y=a[i-1].y;
	}
	sort(a+1,a+1+n,cmpx);
	for(int i=2;i<=n;i++){
		if(a[i].y!=a[i-1].y||abs(a[i].id-a[i-1].id)==1) continue;
		int ms,mt,len;
		string fx;
		if(a[i].id<a[i-1].id){//W
			ms=a[i].id,mt=a[i-1].id;
			len=abs(a[i].x-a[i-1].x);
			fx="W";
		}
		else{//E
			ms=a[i-1].id,mt=a[i].id;
			len=abs(a[i].x-a[i-1].x);
			fx="E";
		}
		if(len<ans) ans=len,s=ms,t=mt,str=fx;
		else if(len==ans&&ms<s) s=ms,t=mt,str=fx;
		else if(len==ans&&ms==s&&mt>t) t=mt,str=fx;
	}
	sort(a+1,a+1+n,cmpy);
	for(int i=2;i<=n;i++){
		if(a[i].x!=a[i-1].x||abs(a[i].id-a[i-1].id)==1) continue;
		int ms,mt,len;
		string fx;
		if(a[i].id<a[i-1].id){//N
			ms=a[i].id,mt=a[i-1].id;
			len=abs(a[i].y-a[i-1].y);
			fx="N";
		}
		else{//S
			ms=a[i-1].id,mt=a[i].id;
			len=abs(a[i].y-a[i-1].y);
			fx="S";	
		}
		if(len<ans) ans=len,s=ms,t=mt,str=fx;
		else if(len==ans&&ms<s) s=ms,t=mt,str=fx;
		else if(len==ans&&ms==s&&mt>t) t=mt,str=fx;
	}
	cout<<ans<<" "<<s<<" "<<t<<" "<<str<<endl;
}

和题解思路差不多 快变成题解的样子了还是没过,似乎是最短距离或者起点判断错了QAQ求大佬帮忙看看错在哪里(大悲)

2023/11/17 14:13
加载中...