Submission #312460

#TimeUsernameProblemLanguageResultExecution timeMemory
312460amunduzbaevMechanical Doll (IOI18_doll)C++14
81.15 / 100
219 ms11800 KiB
//#include "grader.cpp"
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,ind=-1,origin;
vector<vector<int>>way;
vector<int>x,y;
vector<pair<int,int>>t;
bool same(vector<int>v){
    sort(v.begin(),v.end());
    return v[0]==v[v.size()-1] ? 1:0;
}
void solve(vector<int>v , bool c,int i){
    if(c){
        if(same(v)) {x[i]=v[0]; return;}
        else x[i]=ind--;
    }
    else{
        if(same(v)) {y[i]=(v[0]); return;}
        else y[i]=ind--;
    }
    vector<int>l,r;
    for(int j=0;j<v.size();j++){
        if(j%2) r.push_back(v[j]);
        else l.push_back(v[j]);
    }
    x.push_back(0);
    y.push_back(0);
    i=x.size()-1;
    solve(l,1,i);
    solve(r,0,i);
}

void fun(vector<int>v , int a){
    vector<int>l,r;
    int i=0;
    for(;i<a-v.size();i++) {
        l.push_back(origin);
        r.push_back(v[i]);
    }
    int rem=(i%2? 1:0);
    for(;i<v.size();i++){
        if(i%2==rem)l.push_back(v[i]);
        else r.push_back(v[i]);
    }
    x.push_back(0);
    y.push_back(0);
    i=x.size()-1;
    solve(l,1,i);
    solve(r,0,i);
}

int bp(int nx){
    int s=1;
    while(s<nx) s*=2;
    return s;
}
void create_circuit(int M, vector<int> a) {
    n=a.size();
    m=M;
    vector<int>c(m+1,0);
    way.resize(m+1);
    c[0]=a[0];
    for(int i=0;i<n-1;i++){
        way[a[i]].push_back(a[i+1]);
        c[a[i]]=a[i+1];
    }
    way[a[n-1]].push_back(0);
    for(int i=1;i<=m;i++){
        int s=way[i].size();
        if(s<=1) continue;
        c[i]=ind--;
        origin=c[i];
        fun(way[i], bp(s));
    }
    /*
    for(int i=0;i<c.size();i++)
        cout<<c[i]<<" ";
    cout<<"\n";
    for(int i=0;i<x.size();i++)
        cout<<x[i]<<" "<<y[i]<<" \n";
    */

    answer(c,x,y);

}

Compilation message (stderr)

doll.cpp: In function 'void solve(std::vector<int>, bool, int)':
doll.cpp:24:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |     for(int j=0;j<v.size();j++){
      |                 ~^~~~~~~~~
doll.cpp: In function 'void fun(std::vector<int>, int)':
doll.cpp:38:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |     for(;i<a-v.size();i++) {
      |          ~^~~~~~~~~~~
doll.cpp:43:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |     for(;i<v.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...
#Verdict Execution timeMemoryGrader output
Fetching results...