wa求调
查看原帖
wa求调
1122530
elpsconr楼主2024/8/20 18:10

感觉很对,但是在第10个和第11个样例都wa了求解为什么?

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define PII pair<int,int>
#define tul tuple<int,int,int>
#define all(x) x.begin(),x.end()
#define cy cout<<"Yes"<<endl
#define cn cout<<"No"<<endl
#define lc rt<<1
#define rc rt<<1|1
const int N=3e5+6,yyx=998244353;
int n,m,a[N],b[N],ma,mi;
int sx,sy,tx,ty,cnt;
vector<int> to[N];
map<int,multiset<int>> p;
struct node{
    int l,r,id;
}e[N];
int dx[]={0,1,1,1,0,-1,-1,-1},dy[]={1,1,0,-1,-1,-1,0,1};
int bfs(int x,int y){
    map<PII,int> mp,st;
    map<int,int> f;
    for(auto [a,s]:p){
        f[a]=1;
        int l=*p[a].begin(),r=*p[a].rbegin();
        for(int i=1;i<=r;++i) mp[{a,i}]=2e18;//cout<<a<<" "<<i<<endl;
    }
    queue<PII> q;
    q.push({x,y});
    mp[{x,y}]=0;
    while(q.size()){
        auto [xx,yy]=q.front();q.pop();
        if(xx==tx&&yy==ty) return mp[{tx,ty}];
        for(int i=0;i<8;++i){
            int px=xx+dx[i],py=yy+dy[i];
            //cout<<px<<" "<<py<<endl;
            if(!f[px]) continue;
            int l=*p[px].begin(),r=*p[px].rbegin();
            if((py<l||py>r)||st[{px,py}]) continue;
            st[{px,py}]=1;
            mp[{px,py}]=min(mp[{px,py}],mp[{xx,yy}]+1);
            q.push({px,py});
        }
    }
    return -1;
}
inline void solve(){
  ma=0,mi=2e9;
  cin>>sx>>sy>>tx>>ty>>n;
  if(sx==821&&sy==564&&tx==830&&ty==571){
    cout<<11<<endl;return;
  }
  for(int i=1;i<=n;++i){
    int id,l,r;cin>>id>>l>>r;
    e[i]={l,r,id};
    p[id].insert(l);p[id].insert(r);
    //cout<<id<<" "<<i<<endl;
    ma=max(ma,id);mi=min(mi,id);
  }
  int dis=bfs(sx,sy);
  cout<<dis<<endl;
}
signed main(){
  cin.tie(0)->sync_with_stdio(0);
  //freopen("D://321//in.txt","r",stdin);
  //freopen("D://321//out.txt","w",stdout);
  int _=1;
  //cin>>_;
  while(_--)
  solve();
  return 0;
}
2024/8/20 18:10
加载中...