Submission #220094

#TimeUsernameProblemLanguageResultExecution timeMemory
220094daniel920712Sky Walking (IOI19_walk)C++14
0 / 100
765 ms37368 KiB
#include "walk.h"
#include <map>
#include <utility>
#include <queue>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
map < pair < long long , long long > , vector <  pair < long long , pair < long long , long long > > > > Next;
priority_queue < pair < long long , pair < long long , long long > > , vector < pair < long long , pair < long long , long long > > > , greater < pair < long long , pair < long long , long long > > > > all;
set < pair < long long , long long> > have;
vector < long long > xx[500005];
vector < long long > yy[500005];
bool F(long long a,long long b)
{
    return a<b;
}
long long min_distance(std::vector<int> x, std::vector<int> h, std::vector<int> l, std::vector<int> r, std::vector<int> y, int s, int g)
{
    long long N=(long long) x.size(),M=(long long) l.size(),t,i,j;
    for(i=0;i<N;i++)
    {
        xx[i].push_back(0);
        xx[i].push_back(h[i]);
    }
    for(i=0;i<M;i++)
    {
        yy[i].push_back(l[i]);
        yy[i].push_back(r[i]);
    }
    for(i=0;i<N;i++)
    {

        for(j=0;j<M;j++)
        {
            if(l[j]<=x[i]&&x[i]<=r[j]&&y[j]<=h[i])
            {
                xx[i].push_back(y[j]);
                yy[j].push_back(x[i]);
            }
        }
    }
    for(i=0;i<N;i++)
    {
        sort(xx[i].begin(),xx[i].end(),F);
        t=(long long) xx[i].size();
        for(j=1;j<t;j++)
        {
            Next[make_pair(x[i],xx[i][j-1])].push_back(make_pair(xx[i][j]-xx[i][j-1],make_pair(x[i],xx[i][j])));
            Next[make_pair(x[i],xx[i][j])].push_back(make_pair(xx[i][j]-xx[i][j-1],make_pair(x[i],xx[i][j-1])));
        }
    }
    for(i=0;i<M;i++)
    {
        sort(yy[i].begin(),yy[i].end(),F);
        t=(long long) yy[i].size();
        for(j=1;j<t;j++)
        {
            Next[make_pair(yy[i][j-1],y[i])].push_back(make_pair(yy[i][j]-yy[i][j-1],make_pair(yy[i][j],y[i])));
            Next[make_pair(yy[i][j],y[i])].push_back(make_pair(yy[i][j]-yy[i][j-1],make_pair(yy[i][j-1],y[i])));
        }
    }
    all.push(make_pair((long long)0,make_pair((long long)s,(long long)0)));
    while(!all.empty())
    {
        auto xx=all.top();
        all.pop();
        if(xx.second==make_pair((long long) g,(long long)0)) return xx.first;
        if(have.find(xx.second)!=have.end()) continue;
        for(auto i:Next[xx.second]) all.push(make_pair(xx.first+i.first,i.second));
    }
	return -1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...