求助,WA#10
  • 板块P1686 挑战
  • 楼主yhl110804
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/13 09:45
  • 上次更新2025/1/13 15:18:09
查看原帖
求助,WA#10
1037072
yhl110804楼主2025/1/13 09:45

WA#10 虽然一般没人想调大模拟,谁能帮我调一下

#include<bits/stdc++.h>
#define int long long
#define AC return 0; 
using namespace std;
int n;
struct pos {
	int x,y,id;
} a[3000000];
string s;
int px=251111;
int py=251111;
bool cmp(pos c,pos b) {
	if(c.x==b.x)return c.y<b.y;
	else return c.x<b.x;
}
bool ccmp(pos c,pos b) {
	if(c.y==b.y)return c.x<b.x;
	else return c.y<b.y;
}
struct poss {
	long long len,start,end;
	char f;
} ans;
signed main() {
	ans.len=INT_MAX;
	ans.start=INT_MAX;
	ans.end=INT_MIN;
	cin>>n;
	cin>>s;
	s="#"+s;
	//cout<<s<<"\n";
	for(int i=1; i<=n; i++) {
		if(s[i]=='N')py++;
		if(s[i]=='S')py--;
		if(s[i]=='E')px++;
		if(s[i]=='W')px--;
		a[i].id=i;
		a[i].x=px;
		a[i].y=py;
	}
	sort(a+1,a+1+n,cmp);
//	for(int i=1;i<=n;i++)cout<<a[i].id<<" "<<a[i].x<<" "<<a[i].y<<"\n";
//	cout<<"\n";
	for(int i=1; i<n; i++) {
		if(a[i].x==a[i+1].x&&abs(a[i].id-a[i+1].id)!=1) {
			//cout<<a[i].id<<" "<<a[i+1].id<<"\n";
			//		cout<<a[i+1].y<<" "<<a[i].y<<" "<<abs(a[i+1].y-a[i].y)<<"\n";
			if(ans.len>abs(a[i+1].y-a[i].y)) {
				//		cout<<"!";
				if(a[i].y<a[i+1].y) {
					if(a[i].id<a[i+1].id) {
						ans.len=a[i+1].y-a[i].y;
						ans.start=a[i].id;
						ans.end=a[i+1].id;
						ans.f='N';
					} else {
						ans.len=a[i+1].y-a[i].y;
						ans.start=a[i+1].id;
						ans.end=a[i].id;
						ans.f='S';
					}
				} else {
					if(a[i].id<a[i+1].id) {
						ans.len=a[i].y-a[i+1].y;
						ans.start=a[i].id;
						ans.end=a[i+1].id;
						ans.f='S';
					} else {
						ans.len=a[i].y-a[i+1].y;
						ans.start=a[i+1].id;
						ans.end=a[i].id;
						ans.f='N';
					}
				}
			} else if(ans.len==abs(a[i+1].y-a[i].y)) {
				if(a[i].y<a[i+1].y) {
					if(a[i].id<a[i+1].id) {
						if(ans.start>a[i].id) {
							ans.start=a[i].id;
							ans.end=a[i+1].id;
							ans.f='N';
						} else if(ans.start==a[i].id&&ans.end<a[i+1].id) {
							ans.start=a[i].id;
							ans.end=a[i+1].id;
							ans.f='N';
						}

				} else if(a[i].id>a[i+1].id) {
						if(ans.start<a[i+1].id) {
							ans.start=a[i+1].id;
							ans.end=a[i].id;
							ans.f='S';
						} else if(ans.start==a[i+1].id&&ans.end<a[i].id) {
							ans.end=a[i].id;
							ans.f='S';
						}
					}
				} else {
					if(a[i].id<a[i+1].id) {
						if(ans.start>a[i].id) {
							ans.start=a[i].id;
							ans.end=a[i+1].id;
							ans.f='S';
						} else if(ans.start==a[i].id&&ans.end<a[i+1].id) {
							ans.end=a[i+1].id;
							ans.f='S';
						}
					} else if(a[i].id>a[i+1].id) {
						if(ans.start>a[i+1].id) {
							ans.start=a[i+1].id;
							ans.end=a[i].id;
							ans.f='N';
						} else if(ans.start==a[i+1].id&&ans.end<a[i].id) {
							ans.end=a[i].id;
							ans.f='N';
						}
					}
			}
			}
		}
	}
	//cout<<ans.len<<" "<<ans.start<<" "<<ans.end<<" "<<ans.f<<"\n";
	sort(a+1,a+1+n,ccmp);
//	for(int i=1;i<=n;i++)cout<<a[i].id<<" ";
//	cout<<"\n";
	for(int i=1; i<n; i++) {
		if(a[i].y==a[i+1].y&&abs(a[i].id-a[i+1].id)!=1) {
			if(ans.len>abs(a[i].x-a[i+1].x)) {
				if(a[i].x<a[i+1].x) {
					if(a[i].id<a[i+1].id) {
						ans.len=a[i+1].x-a[i].x;
						ans.start=a[i].id;
						ans.end=a[i+1].id;
						ans.f='E';
					} else {
						ans.end=a[i].x;
						ans.len=a[i+1].x-a[i].x;
						ans.start=a[i+1].id;
						ans.f='W';
					}
				} else {
					//a[i].x>a[i+1].x
					if(a[i].id<a[i+1].id) {
						ans.len=a[i].x-a[i+1].x;
						ans.end=a[i+1].id;
						ans.start=a[i].id;
						ans.f='W';
					} else {
						ans.len=a[i].x-a[i+1].x;
						ans.end=a[i].id;
						ans.start=a[i+1].id;
						ans.f='E';
					}
				}
			} else if(ans.len==abs(a[i].x-a[i+1].x)) {
				if(a[i].x<a[i+1].x) {
					if(a[i].id<a[i+1].id) {
						if(ans.start>a[i].id) {
							ans.end=a[i+1].id;
							ans.start=a[i].id;
							ans.f='E';
						} else if(ans.start==a[i].id&&ans.end<a[i+1].id) {
							ans.end=a[i+1].id;
							ans.f='E';
						}
					} else {
						if(ans.start>a[i+1].id) {
							ans.start=a[i+1].id;
							ans.end=a[i].id;
							ans.f='W';
						} else if(ans.start==a[i+1].id&&ans.end<a[i].id) {
							ans.end=a[i].id;
							ans.f='W';
						}
					}
				} else {
					//a[i].x>a[i+1].x
					if(a[i].id<a[i+1].id) {
						if(ans.start>a[i].id) {
							ans.start=a[i].id;
							ans.end=a[i+1].id;
							ans.f='W';
						} else if(ans.start==a[i].id&&ans.end<a[i+1].id) {
							ans.end=a[i+1].id;
							ans.f='W';
						}
					} else {
						//a[i].id>a[i+1].id
						if(ans.start>a[i+1].id) {
							ans.start=a[i+1].id;
							ans.end=a[i].id;
							ans.f='E';
						} else if(ans.start==a[i+1].id&&ans.end<a[i].id) {
							ans.end=a[i].id;
							ans.f='E';
						}
					}
				}
			}
		}
	}
	cout<<ans.len<<" "<<ans.start<<" "<<ans.end<<" "<<ans.f<<"\n";
	AC
}
2025/1/13 09:45
加载中...