Submission #827785

#TimeUsernameProblemLanguageResultExecution timeMemory
827785AlesL0자동 인형 (IOI18_doll)C++17
6 / 100
1074 ms15712 KiB
#include <bits/stdc++.h>
#include "doll.h"

using namespace std;

int current = 1;
vector <int> X, Y, C;

bool check_same(vector <int> v){
    for (int i = 0; i < v.size()-1; i++)if (v[i] != v[i+1])return 0;
    return 1;
}

int solve(vector <int> v){
    if (check_same(v))return v[0];
    vector <int> v1, v2;
    int c = current++;
    if (v.size() & 1){
        v.push_back(-c);
        swap(v[v.size()-1], v[v.size()-2]);
    }
    for (int i = 0; i < v.size(); i+=2)v1.push_back(v[i]);
    for (int i = 1; i < v.size(); i+=2)v2.push_back(v[i]);
    int a = solve(v1), b = solve(v2);
    X[c-1] = a;
    Y[c-1] = b;
    return -c;
}

void create_circuit(int M, std::vector<int> A) {
    vector <vector <int>> dest(M+1);
    const int INF = -100000000;
    X.resize(300000, INF);
    Y.resize(300000, INF);
    A.push_back(0);
    dest[0].push_back(A[0]);
    for (int i = 0; i < A.size()-1; i++)dest[A[i]].push_back(A[i+1]);
    C.resize(M+1);
    for (int i = 0; i <= M; i++){
        if (dest[i].empty()){
            C[i] = i;
            continue;
        }
        C[i] = solve(dest[i]);
    }
    for (auto x : C)cerr << x << " ";
    cerr << "\n";
    while (!X.empty() && X.back() == INF)X.pop_back();
    while (!Y.empty() && Y.back() == INF)Y.pop_back();
    for (int i = 0; i < X.size(); i++)cerr << X[i] << " " << Y[i] << "\n";
    answer(C, X, Y);
}

Compilation message (stderr)

doll.cpp: In function 'bool check_same(std::vector<int>)':
doll.cpp:10:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   10 |     for (int i = 0; i < v.size()-1; i++)if (v[i] != v[i+1])return 0;
      |                     ~~^~~~~~~~~~~~
doll.cpp: In function 'int solve(std::vector<int>)':
doll.cpp:22:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |     for (int i = 0; i < v.size(); i+=2)v1.push_back(v[i]);
      |                     ~~^~~~~~~~~~
doll.cpp:23:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |     for (int i = 1; i < v.size(); i+=2)v2.push_back(v[i]);
      |                     ~~^~~~~~~~~~
doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:37:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |     for (int i = 0; i < A.size()-1; i++)dest[A[i]].push_back(A[i+1]);
      |                     ~~^~~~~~~~~~~~
doll.cpp:50:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |     for (int i = 0; i < X.size(); i++)cerr << X[i] << " " << Y[i] << "\n";
      |                     ~~^~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...