Submission #766937

# Submission time Handle Problem Language Result Execution time Memory
766937 2023-06-26T09:11:26 Z DJeniUp Mechanical Doll (IOI18_doll) C++17
6 / 100
1000 ms 17472 KB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;

typedef int ll;

#define pb push_back
#define fr first
#define sc second

ll h,a[400007],b[400007],f[400007];

vector<ll>v[200007];

vector<ll>p;

vector<ll>c,x,y;

void create_circuit(int M, std::vector<int> A) {
    A.pb(0);
    for(int i=0;i<A.size()-1;i++){
        v[A[i]].pb(A[i+1]);
    }
    c.pb(A[0]);
    for(int i=1;i<=M;i++){
        if(v[i].size()==0)c.pb(0);
        else if(v[i].size()==1)c.pb(v[i][0]);
        else{
            h++;
            x.pb(-h);
            y.pb(-h);
            c.pb(-h);
            for(int j=0;j<v[i].size();j++){
                ll k=-c[i]-1;
                while(1){
                    if(f[k]%2==0){
                        f[k]++;
                        if(x[k]==-k-1){
                            x[k]=v[i][j];
                            break;
                        }else if(x[k]<0){
                            k=-x[k]-1;
                        }else{
                            h++;
                            f[h-1]=1;
                            x.pb(-h);
                            y.pb(-h);
                            x[h-1]=x[k];
                            x[k]=-h;
                            k=h-1;
                        }
                    }else{
                        f[k]++;
                        if(y[k]==-k-1){
                            y[k]=v[i][j];
                            break;
                        }else if(y[k]<0){
                            k=-y[k]-1;
                        }else{
                            h++;
                            f[h-1]=1;
                            x.pb(-h);
                            y.pb(-h);
                            x[h-1]=y[k];
                            y[k]=-h;
                            k=h-1;
                        }
                    }
                }
            }
        }
    }
    while(1){
        ll k=c[0];
        ll z=0;
        for(int i=0;i<h;i++){
            f[i]=0;
        }
        while(p.size()>0)p.pop_back();
        ll pr=0;
        while(k!=0){
            pr=k;
            if(k>0){
                k=c[k];
            }else{
                if(f[-k-1]%2==0){
                    p.pb(k);
                    f[-k-1]++;
                    k=x[-k-1];
                }else{

                    f[-k-1]++;
                    k=y[-k-1];
                }
            }
        }
        //cout<<p.back()<<" "<<f[-p.back()-1]<<endl;
        while(p.size()>0 && f[-p.back()-1]%2==0)p.pop_back();
        if(p.size()==0)break;
        else z=p.back();
        //cout<<z<<endl;
        if(f[-z-1]%2==0){
            break;
        }else{
            if(pr>0)c[pr]=z;
            else{
                if(f[-pr-1]%2==1)x[-pr-1]=z;
                else y[-pr-1]=z;
            }
            k=-z-1;
            while(1){
                if(f[k]%2==0){
                    f[k]++;
                    if(x[k]==-k-1){
                        x[k]=0;
                        break;
                    }else if(x[k]<0){
                        k=-x[k]-1;
                    }else{
                        h++;
                        f[h-1]=1;
                        x.pb(-h);
                        y.pb(-h);
                        x[h-1]=x[k];
                        x[k]=-h;
                        k=h-1;
                    }
                }else{
                    f[k]++;
                    if(y[k]==-k-1){
                        y[k]=0;
                        break;
                    }else if(y[k]<0){
                        k=-y[k]-1;
                    }else{
                        h++;
                        f[h-1]=1;
                        x.pb(-h);
                        y.pb(-h);
                        x[h-1]=y[k];
                        y[k]=-h;
                        k=h-1;
                    }
                }
            }
        }
    }
    //cout<<c.size()<<" "<<x.size()<<" "<<y.size()<<endl;
    for(int i=0;i<=M;i++){
       // cout<<i<<" "<<c[i]<<endl;
    }
    for(int i=0;i<x.size();i++){
       //if(x[i]==-i-1)swap(x[i],y[i]);
       //cout<<-i-1<<" "<<x[i]<<" "<<y[i]<<endl;
    }
    answer(c,x,y);
    return ;
}

Compilation message

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.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<A.size()-1;i++){
      |                 ~^~~~~~~~~~~
doll.cpp:33:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |             for(int j=0;j<v[i].size();j++){
      |                         ~^~~~~~~~~~~~
doll.cpp:152:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  152 |     for(int i=0;i<x.size();i++){
      |                 ~^~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 20 ms 8876 KB Output is correct
3 Correct 16 ms 8368 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 10 ms 6220 KB Output is correct
6 Correct 25 ms 10260 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 20 ms 8876 KB Output is correct
3 Correct 16 ms 8368 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 10 ms 6220 KB Output is correct
6 Correct 25 ms 10260 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
8 Correct 38 ms 11784 KB Output is correct
9 Correct 40 ms 12088 KB Output is correct
10 Correct 57 ms 15272 KB Output is correct
11 Correct 2 ms 4948 KB Output is correct
12 Correct 2 ms 4948 KB Output is correct
13 Correct 3 ms 4948 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 20 ms 8876 KB Output is correct
3 Correct 16 ms 8368 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 10 ms 6220 KB Output is correct
6 Correct 25 ms 10260 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
8 Correct 38 ms 11784 KB Output is correct
9 Correct 40 ms 12088 KB Output is correct
10 Correct 57 ms 15272 KB Output is correct
11 Correct 2 ms 4948 KB Output is correct
12 Correct 2 ms 4948 KB Output is correct
13 Correct 3 ms 4948 KB Output is correct
14 Execution timed out 1075 ms 12996 KB Time limit exceeded
15 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 2 ms 4948 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Partially correct 2 ms 4948 KB Output is partially correct
2 Correct 63 ms 17472 KB Output is correct
3 Execution timed out 1088 ms 17428 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Partially correct 2 ms 4948 KB Output is partially correct
2 Correct 63 ms 17472 KB Output is correct
3 Execution timed out 1088 ms 17428 KB Time limit exceeded
4 Halted 0 ms 0 KB -