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
}