답안 #776019

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
776019 2023-07-07T08:33:53 Z I_Love_EliskaM_ 자동 인형 (IOI18_doll) C++14
컴파일 오류
0 ms 0 KB
    #include "doll.h"
    #include <bits/stdc++.h>
    using namespace std;
    #define forn(i,n) for(int i=0;i<n;++i)
    #define ll long long
    #define pb push_back
    #define all(x) x.begin(), x.end()
    const ll inf = 1e18;
    #define pi pair<int,int>
    #define f first
    #define s second
     
    void mysim(vector<int> c, vector<int> x, vector<int> y) {
      int p=0;
      int z=1;
      int k=x.size();
      vector<int> s(k,0);
      while (z||p) {
        if (!p) {
          z=0; p=c[p];
        } else if (p>0) {
          cout<<p<<"->\n";
          p=c[p];
        } else {
          cout<<"? "<<p<<'\n';
          int i=-p-1;
          if (s[i]==0) p=x[i];
          else p=y[i];
          s[i]^=1;
        }
      }
    }
     
    void create_circuit(int m, vector<int>a) {
      int n=a.size();
      map<int,int> cnt;
      int mx=0;
      for(auto&x:a) {
        cnt[x]++;
        mx=max(mx,cnt[x]);
      }
      if (mx<=4) {
        vector<int> c(m+1,0);
        c[0]=a[0];
        vector<int> x,y;
        int nxt=0;
        for(auto&it:cnt) {
          int v=it.f, k=it.s;
          if (k==1) continue;
          if (k==2) {
            x.pb(0), y.pb(0);
            c[v]=-1-nxt++;
          } else {
            x.pb(-1-(nxt+1)), y.pb(-1-(nxt+2));
            forn(i,2) x.pb(0), y.pb(0);
            if (k==3) y[nxt+1]=-1-(nxt);
            c[v]=-nxt-1;
            nxt+=3;
          }
        }
        map<int,int> ok;
        a.pb(0);
        for(int i=0;i<n;++i) {
          int k=cnt[a[i]];
          if (k==1) {
            c[a[i]]=a[i+1];
          } else if (k==2) {
            if (ok[a[i]]) {
              y[-c[a[i]]-1]=a[i+1];
            } else {
              ++ok[a[i]];
              x[-c[a[i]]-1]=a[i+1];
            }
          } else if (k==3) {
            if (ok[a[i]]==0) {
              x[-1-x[-c[a[i]]-1]]=a[i+1];
            } else if (ok[a[i]]==1) {
              x[-1-y[-c[a[i]]-1]]=a[i+1];
            } else {
              y[-1-y[-c[a[i]]-1]]=a[i+1];
            }
            ++ok[a[i]];
          } else {
            if (ok[a[i]]==0) {
              x[-1-x[-c[a[i]]-1]]=a[i+1];
            } else if (ok[a[i]]==1) {
              x[-1-y[-c[a[i]]-1]]=a[i+1];
            } else if (ok[a[i]]==2) {
              y[-1-x[-c[a[i]]-1]]=a[i+1];
            } else {
              y[-1-y[-c[a[i]]-1]]=a[i+1];
            }
            ++ok[a[i]];
          }
        }
        //forn(i,m+1) cout<<c[i]<<' '; cout<<'\n';
        //forn(i,x.size()) cout<<x[i]<<' '<<y[i]<<'\n';
        //mysim(c,x,y);
        answer(c,x,y);
        return;
      }
     
      vector<int> c(m+1,-1); c[0]=a[0];
      int sz=1; while (2*sz<n) sz<<=1;
      vector<int> x(2*sz-1,-1), y(2*sz-1,-1);
      forn(i,sz-1) x[i]=2*i+1, y[i]=2*i+2;
      forn(i,sz-1) x[i]=-1-x[i], y[i]=-1-y[i];
      vector<int> s(2*sz-1,1);
     
      vector<pi> z;
      forn(it,2*sz) {
        int p=0;
        while (p<sz-1) {
          s[p]^=1;
          p=2*p+1+s[p];
        }
        s[p]^=1;
        z.pb({p,s[p]});
      }
      
      forn(i,n-1) {
        if (z[i].s) y[z[i].f]=a[i+1];
        else x[z[i].f]=a[i+1];
      }
      y[z.back().f]=0;
     
      answer(c,fs,sc);
    }

Compilation message

doll.cpp: In function 'void create_circuit(int, std::vector<int>)':
doll.cpp:127:16: error: 'fs' was not declared in this scope; did you mean 'ffs'?
  127 |       answer(c,fs,sc);
      |                ^~
      |                ffs
doll.cpp:127:19: error: 'sc' was not declared in this scope; did you mean 'sz'?
  127 |       answer(c,fs,sc);
      |                   ^~
      |                   sz