제출 #1230346

#제출 시각아이디문제언어결과실행 시간메모리
1230346VMaksimoski008자동 인형 (IOI18_doll)C++20
16 / 100
48 ms11924 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;

void create_circuit(int m, vector<int> a) {
    vector<int> c(m+1), x, y;
    for(int i=1; i<=m; i++) c[i] = i;
    c[0] = a[0];

    int n = a.size();
    a.push_back(0);

    vector<int> mp[m+1];
    for(int i=0; i<=n; i++) mp[a[i]].push_back(i);

    int id = 1;
    vector<bool> vis(m+1);
    for(int i=1; i<=m; i++) {
        if(vis[i]) continue;
        if(mp[i].size() == 1) {
            int p = mp[i][0];
            c[i] = a[p+1];
        } else if(mp[i].size() == 2) {
            c[i] = -id;
            int p1 = mp[i][0], p2 = mp[i][1];
            x.push_back(a[p1+1]);
            y.push_back(a[p2+1]);
            id++;
        } else if(mp[i].size() == 4) {
            c[i] = -id;
            x.push_back(-id-1);
            y.push_back(-id-2);

            x.push_back(a[ mp[i][0]+1 ]);
            y.push_back(a[ mp[i][2]+1 ]);

            x.push_back(a[ mp[i][1]+1 ]);
            y.push_back(a[ mp[i][3]+1 ]);

            id += 3;
        } else if(mp[i].size() == 3) {
            c[i] = -id;
            x.push_back(-id-1);
            y.push_back(-id-2);

            x.push_back(a[ mp[i][0]+1 ]);
            y.push_back(-id);

            x.push_back(a[ mp[i][1]+1 ]);
            y.push_back(a[ mp[i][2]+1 ]);

            id += 3;
        }
    }

    answer(c, x, y);
}
#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...