제출 #791762

#제출 시각아이디문제언어결과실행 시간메모리
791762ezzzaySplit the Attractions (IOI19_split)C++14
0 / 100
24 ms47228 KiB
#include "split.h"
#include <cstdio>
#include <cassert>
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+5;
vector<int>v[N];
bool vis[N];
vector<int>ans;
void dfs(int a){
    vis[a]=1;
    ans.push_back(a);
    for(auto b:v[a]){
        if(vis[b]==0)dfs(b);
    }
}
vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) {
    vector<pair<int,int>>f;
    f.push_back({a,0});f.push_back({b,1});f.push_back({c,2});
	sort(f.begin(),f.end());
    for(int i=0;i<p.size();i++){
        v[p[i]].push_back(q[i]);
        v[q[i]].push_back(p[i]);
    }
	vector<int> res;
	dfs(0);
	
    vector<int>A,B,C;
    int idx=f[0].second;
    int h=f[0].first;
    for(int i=0;i<n;i++)vis[i]=0;
    if(idx==0){
        for(int i=0;i<h;i++){
            A.push_back(ans[ans.size()-1]);
            vis[ans[ans.size()-1]]=1;
            ans.pop_back();
        }
    }
    else if(idx==1){
        for(int i=0;i<h;i++){
           B.push_back(ans[ans.size()-1]);
           vis[ans[ans.size()-1]]=1;
           ans.pop_back();
        }
    }
    else {
        for(int i=0;i<h;i++){
            C.push_back(ans[ans.size()-1]);
            vis[ans[ans.size()-1]]=1;
            ans.pop_back();
        }
    }
    idx=f[1].second;
    h=f[1].first;
    if(idx==0){
        for(int i=0;i<h;i++){
            A.push_back(ans[ans.size()-1]);
            vis[ans[ans.size()-1]]=1;
            ans.pop_back();
        }
    }
    else if(idx==1){
        for(int i=0;i<h;i++){
           B.push_back(ans[ans.size()-1]);
           vis[ans[ans.size()-1]]=1;
           ans.pop_back();
        }
    }
    else {
        for(int i=0;i<h;i++){
            C.push_back(ans[ans.size()-1]);
            vis[ans[ans.size()-1]]=1;
            ans.pop_back();
        }
    }
    idx=f[2].second;
    if(idx==0){
        for(int i=0;i<n;i++){
            if(vis[i]==0)A.push_back(i);
        }
    }
    else if(idx==1){
        for(int i=0;i<n;i++){
            if(vis[i]==0)B.push_back(i);
        }
    }
    else {
        for(int i=0;i<n;i++){
            if(vis[i]==0)C.push_back(i);
        }
    }
    for(int i=0;i<A.size();i++){
        res.push_back(A[i]);
    }
    
    for(int i=0;i<B.size();i++){
        res.push_back(B[i]);
    }
    
    for(int i=0;i<C.size();i++){
        res.push_back(C[i]);
    }
    return res;
}

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

split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:21:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   21 |     for(int i=0;i<p.size();i++){
      |                 ~^~~~~~~~~
split.cpp:92:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   92 |     for(int i=0;i<A.size();i++){
      |                 ~^~~~~~~~~
split.cpp:96:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   96 |     for(int i=0;i<B.size();i++){
      |                 ~^~~~~~~~~
split.cpp:100:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  100 |     for(int i=0;i<C.size();i++){
      |                 ~^~~~~~~~~
#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...