Submission #762522

# Submission time Handle Problem Language Result Execution time Memory
762522 2023-06-21T12:56:47 Z alexander707070 Sky Walking (IOI19_walk) C++14
Compilation error
0 ms 0 KB
#include<bits/stdc++.h>
#define MAXN 2000007
using namespace std;

const long long inf=1e16;

int n,m,z,minv,last,w; 
map< pair<int,int>, int > mp;
vector<int> w[MAXN];
vector< pair<int,int> > v[MAXN];
long long dist[MAXN];
priority_queue< pair<long long,int> , vector< pair<long long,int> > , greater< pair<long long,int> > > q; 
bool vis[MAXN];

void add_edge(int x,int y,int c){
    v[x].push_back({y,c});
    v[y].push_back({x,c});
}

void dijkstra(){
    for(int i=1;i<=z;i++){
        dist[i]=inf;
    }

    dist[1]=0;
    q.push({0,1});
    
    while(!q.empty()){
        minv=q.top().second;
        q.pop();

        if(vis[minv])continue;
        vis[minv]=true;

        for(int i=0;i<v[minv].size();i++){
            if(vis[v[minv][i].first] or dist[v[minv][i].first]<dist[minv]+v[minv][i].second)continue;
            dist[v[minv][i].first]=dist[minv]+v[minv][i].second;
            q.push({dist[v[minv][i].first],v[minv][i].first});
        }
    }
}

long long min_distance(vector<int> x,vector<int> h,vector<int> l,vector<int> r,vector<int> y,int s, int g){
    n=int(x.size()); m=int(l.size());

    mp[{x[s],0}]=1;
    mp[{x[g],0}]=2; 
    z=2;

    for(int i=0;i<m;i++){
        for(int f=l[i];f<=r[i];f++){
            if(h[f]<y[i])continue;
            z++; mp[{x[f],y[i]}]=z;
            w[f].push_back(y[i]);
        }
    }

    for(int i=0;i<n;i++){
        if(i==s or i==g)w[i].push_back(0);
        if(!w[i].empty())sort(w[i].begin(),w[i].end());

        for(int f=0;f<w[i].size()-1;f++){
            add_edge(mp[{x[i],w[i][f]}],mp[{x[i],w[i][f+1]}],w[i][f+1]-w[i][f]);
        }
    }

    w=1;
    for(long long i=0;i<1000000000;i++){
        w*=82633; w%=47574;
    }

    for(int i=0;i<m;i++){
        last=-1;
        for(int f=l[i];f<=r[i];f++){
            if(h[f]<y[i])continue;
            if(last!=-1)add_edge(mp[{x[last],y[i]}],mp[{x[f],y[i]}],x[f]-x[last]);
            last=f;
        }
    }

    dijkstra();
    if(dist[2]==inf)return -1;
    return dist[2];
}
 
/*
int main(){
 
    //cout<<min_distance({0, 3, 5, 7, 10, 12, 14}, {8, 7, 9, 7, 6, 6, 9}, {0, 0, 0, 2, 2, 3, 4}, {1, 2, 6, 3, 6, 4, 6}, {1, 6, 8, 1, 7, 2, 5}, 1, 5)<<"\n";
    //cout<<min_distance({0, 4, 5, 6, 9}, {6, 6, 6, 6, 6},{3, 1, 0},{4, 3, 2},{1, 3, 6},0, 4)<<"\n";

    return 0;
}
*/

Compilation message

walk.cpp:9:13: error: conflicting declaration 'std::vector<int> w [2000007]'
    9 | vector<int> w[MAXN];
      |             ^
walk.cpp:7:21: note: previous declaration as 'int w'
    7 | int n,m,z,minv,last,w;
      |                     ^
walk.cpp: In function 'void dijkstra()':
walk.cpp:35:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |         for(int i=0;i<v[minv].size();i++){
      |                     ~^~~~~~~~~~~~~~~
walk.cpp: In function 'long long int min_distance(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, int, int)':
walk.cpp:54:14: error: invalid types 'int[int]' for array subscript
   54 |             w[f].push_back(y[i]);
      |              ^
walk.cpp:59:26: error: invalid types 'int[int]' for array subscript
   59 |         if(i==s or i==g)w[i].push_back(0);
      |                          ^
walk.cpp:60:14: error: invalid types 'int[int]' for array subscript
   60 |         if(!w[i].empty())sort(w[i].begin(),w[i].end());
      |              ^
walk.cpp:60:32: error: invalid types 'int[int]' for array subscript
   60 |         if(!w[i].empty())sort(w[i].begin(),w[i].end());
      |                                ^
walk.cpp:60:45: error: invalid types 'int[int]' for array subscript
   60 |         if(!w[i].empty())sort(w[i].begin(),w[i].end());
      |                                             ^
walk.cpp:62:24: error: invalid types 'int[int]' for array subscript
   62 |         for(int f=0;f<w[i].size()-1;f++){
      |                        ^
walk.cpp:63:32: error: invalid types 'int[int]' for array subscript
   63 |             add_edge(mp[{x[i],w[i][f]}],mp[{x[i],w[i][f+1]}],w[i][f+1]-w[i][f]);
      |                                ^
walk.cpp:63:24: error: no match for 'operator[]' (operand types are 'std::map<std::pair<int, int>, int>' and '<brace-enclosed initializer list>')
   63 |             add_edge(mp[{x[i],w[i][f]}],mp[{x[i],w[i][f+1]}],w[i][f+1]-w[i][f]);
      |                        ^
In file included from /usr/include/c++/10/map:61,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:81,
                 from walk.cpp:1:
/usr/include/c++/10/bits/stl_map.h:492:7: note: candidate: 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::pair<int, int>; _Tp = int; _Compare = std::less<std::pair<int, int> >; _Alloc = std::allocator<std::pair<const std::pair<int, int>, int> >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = int; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = std::pair<int, int>]'
  492 |       operator[](const key_type& __k)
      |       ^~~~~~~~
/usr/include/c++/10/bits/stl_map.h:492:34: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const key_type&' {aka 'const std::pair<int, int>&'}
  492 |       operator[](const key_type& __k)
      |                  ~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_map.h:512:7: note: candidate: 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](std::map<_Key, _Tp, _Compare, _Alloc>::key_type&&) [with _Key = std::pair<int, int>; _Tp = int; _Compare = std::less<std::pair<int, int> >; _Alloc = std::allocator<std::pair<const std::pair<int, int>, int> >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = int; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = std::pair<int, int>]'
  512 |       operator[](key_type&& __k)
      |       ^~~~~~~~
/usr/include/c++/10/bits/stl_map.h:512:29: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'std::map<std::pair<int, int>, int>::key_type&&' {aka 'std::pair<int, int>&&'}
  512 |       operator[](key_type&& __k)
      |                  ~~~~~~~~~~~^~~
walk.cpp:63:51: error: invalid types 'int[int]' for array subscript
   63 |             add_edge(mp[{x[i],w[i][f]}],mp[{x[i],w[i][f+1]}],w[i][f+1]-w[i][f]);
      |                                                   ^
walk.cpp:63:43: error: no match for 'operator[]' (operand types are 'std::map<std::pair<int, int>, int>' and '<brace-enclosed initializer list>')
   63 |             add_edge(mp[{x[i],w[i][f]}],mp[{x[i],w[i][f+1]}],w[i][f+1]-w[i][f]);
      |                                           ^
In file included from /usr/include/c++/10/map:61,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:81,
                 from walk.cpp:1:
/usr/include/c++/10/bits/stl_map.h:492:7: note: candidate: 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::pair<int, int>; _Tp = int; _Compare = std::less<std::pair<int, int> >; _Alloc = std::allocator<std::pair<const std::pair<int, int>, int> >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = int; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = std::pair<int, int>]'
  492 |       operator[](const key_type& __k)
      |       ^~~~~~~~
/usr/include/c++/10/bits/stl_map.h:492:34: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const key_type&' {aka 'const std::pair<int, int>&'}
  492 |       operator[](const key_type& __k)
      |                  ~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_map.h:512:7: note: candidate: 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](std::map<_Key, _Tp, _Compare, _Alloc>::key_type&&) [with _Key = std::pair<int, int>; _Tp = int; _Compare = std::less<std::pair<int, int> >; _Alloc = std::allocator<std::pair<const std::pair<int, int>, int> >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = int; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = std::pair<int, int>]'
  512 |       operator[](key_type&& __k)
      |       ^~~~~~~~
/usr/include/c++/10/bits/stl_map.h:512:29: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'std::map<std::pair<int, int>, int>::key_type&&' {aka 'std::pair<int, int>&&'}
  512 |       operator[](key_type&& __k)
      |                  ~~~~~~~~~~~^~~
walk.cpp:63:63: error: invalid types 'int[int]' for array subscript
   63 |             add_edge(mp[{x[i],w[i][f]}],mp[{x[i],w[i][f+1]}],w[i][f+1]-w[i][f]);
      |                                                               ^
walk.cpp:63:73: error: invalid types 'int[int]' for array subscript
   63 |             add_edge(mp[{x[i],w[i][f]}],mp[{x[i],w[i][f+1]}],w[i][f+1]-w[i][f]);
      |                                                                         ^