제출 #1351713

#제출 시각아이디문제언어결과실행 시간메모리
1351713yyc000123즐거운 행로 (APIO20_fun)C++20
컴파일 에러
0 ms0 KiB
#include<bits/stdc++.h>
using namespace std ;
#define F first
#define S second
const int N = 1e5+5 ;
const int Q = 4e5+5 ;
int n , sub[N] , deep[N] ;
vector<int> ans , vd[N] , nei[N] ;
set<pair<int,int>> st[3] ;

int hoursRequired(int x , int y) ;
int attractionsBehind(int x , int y) ;

void dfs(int node , int t){
    st[t].insert({-deep[node],node}) ;
    for(int i:nei[node]){
        deep[i]=deep[node]+1 ;
        dfs(i,t) ;
    }
}

vector<int> createFunTour(int n1 , int q){
    n = n1 ;
    int pos = -1 ;
    for(int i=0 ; i<n ; i++){
        sub[i]=attractionsBehind(0,i) ;
        if(sub[i]>=(n+1)/2 && (pos==-1 || sub[i]<sub[pos])) pos = i ; 
    }
    for(int i=0 ; i<n ; i++) deep[i]=hoursRequired(pos,i) , vd[deep[i]].push_back(i) ;
    for(int i=0 ; i<=n ; i++){
        for(int j:vd[i]){
            int cnt = 0 ;
            for(int l:vd[i-1]){
                if(cnt==2 || hoursRequired(l,j)==1){
                    nei[l].push_back(j) ;
                    break ;
                }
                cnt++ ;
            }
        }
    }
    deep[pos]=0 ;
    for(int i=0 ; i<nei[pos].size() ; i++) deep[nei[pos][i]]=1 , dfs(nei[pos][i],i) ;
    if(st[0].size()<st[1].size()) swap(st[0],st[1]) ;
    if(st[2].empty()) assert(abs(st[0].size()-st[1].size())<=1) ; //
    int t = -1 , sum = n-1 ;
    if(nei[pos].size()==2) t=1 ;
    while(sum){
        int a = st[0].size() , b = st[1].size() , c = st[2].size() ;
        if(2*max({a,b,c})==a+b+c && min({a,b,c})){
            if(b>a && b>c){
                swap(st[0],st[1]) ;
                if(t!=2) t=!t ;
            }
            if(c>a && c>b){
                swap(st[0],st[2]) ;
                if(t!=1) t=2-t ;
            }
            for(auto it:st[2]) st[1].insert(it) ;
            st[2].clear() ;
            if(t==2) t=1 ;
        }
        int cur = -1 ;
        for(int i=0 ; i<3 ; i++){
            if(i==t || st[i].empty()) continue ;
            if(cur==-1 || st[i].begin()->F<st[cur].begin()->F) cur = i ;
        }
        // if(cur==-1) assert(nei[pos].size()!=3) ; // case 3 WA , others RE
        if(cur==-1) return {} ; // all RE
        t = cur ;
        ans.push_back(st[cur].begin()->S) ;
        st[cur].erase(st[cur].begin()) ;
        sum-- ;
    }
    ans.push_back(pos) ;
    return ans ;
}

/*
int hoursRequired(int x , int y){
    cout << "h " << x << ' ' << y << '\n' ;
    int k ; cin >> k ; return k ;
}
int attractionsBehind(int x , int y){
    cout << "a " << x << ' ' << y << '\n' ;
    int k ; cin >> k ; return k ;
}
int main(){
    vector<int> v = createFunTour(7,Q-5) ; for(int i:v) cout << i << ' ' ; cout << '\n' ;
    return 0 ;
}
*/

컴파일 시 표준 에러 (stderr) 메시지

In file included from /usr/include/c++/13/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:106,
                 from fun.cpp:1:
fun.cpp: In function 'std::vector<int> createFunTour(int, int)':
fun.cpp:45:33: error: call of overloaded 'abs(std::set<std::pair<int, int> >::size_type)' is ambiguous
   45 |     if(st[2].empty()) assert(abs(st[0].size()-st[1].size())<=1) ; //
      |                              ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/13/cstdlib:79,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:42:
/usr/include/stdlib.h:980:12: note: candidate: 'int abs(int)'
  980 | extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
      |            ^~~
In file included from /usr/include/c++/13/cstdlib:81:
/usr/include/c++/13/bits/std_abs.h:137:3: note: candidate: 'constexpr __float128 std::abs(__float128)'
  137 |   abs(__float128 __x)
      |   ^~~
/usr/include/c++/13/bits/std_abs.h:85:3: note: candidate: 'constexpr __int128 std::abs(__int128)'
   85 |   abs(__GLIBCXX_TYPE_INT_N_0 __x) { return __x >= 0 ? __x : -__x; }
      |   ^~~
/usr/include/c++/13/bits/std_abs.h:79:3: note: candidate: 'constexpr long double std::abs(long double)'
   79 |   abs(long double __x)
      |   ^~~
/usr/include/c++/13/bits/std_abs.h:75:3: note: candidate: 'constexpr float std::abs(float)'
   75 |   abs(float __x)
      |   ^~~
/usr/include/c++/13/bits/std_abs.h:71:3: note: candidate: 'constexpr double std::abs(double)'
   71 |   abs(double __x)
      |   ^~~
/usr/include/c++/13/bits/std_abs.h:61:3: note: candidate: 'long long int std::abs(long long int)'
   61 |   abs(long long __x) { return __builtin_llabs (__x); }
      |   ^~~
/usr/include/c++/13/bits/std_abs.h:56:3: note: candidate: 'long int std::abs(long int)'
   56 |   abs(long __i) { return __builtin_labs(__i); }
      |   ^~~