제출 #1364903

#제출 시각아이디문제언어결과실행 시간메모리
1364903gayRotating Lines (APIO25_rotate)C++20
0 / 100
1 ms2372 KiB
#include <bits/stdc++.h>

using namespace std;

using ld = long double;


void rotate(std::vector<int> t, int x);

void energy(int n, std::vector<int> v) {
    vector<vector<int>> pos(50000);
    vector<int> cnt(50000);
    for (int i = 0; i < n; i++) {
        pos[v[i]].push_back(i);
        cnt[v[i]]++;
    }
    for (int i = 1; i < 50000; i++) {
        cnt[i] += cnt[i - 1];
    }
    int rf = -1;
    for (int r = 25000; r < 50000; r++) {
        int l = r - 25000 - 1;
        int col = cnt[r];
        if (l >= 0) col -= cnt[l];
        if (col - 1 >= n - col) {
            rf = r;
            break;
        }
    }
    if (rf == -1) return;
    for (int i = rf; i >= rf - 25000; i++) {
        int x = i - (rf - 25000);
        rotate(pos[i], x);
        for (auto j : pos[i]) {
            v[j] = rf - 25000;
        }
    }
    vector<pair<int, int>> a;
    for (int i = 0; i < n; i++) {
        if (v[i] < 25000) {
            a.emplace_back(v[i], i);
        }
    }
    sort(a.begin(), a.end());
    int m = n / 2;
    for (int i = 0; i < m; i++) {
        if (a[i].first == 0) continue;
        vector<int> t = {a[i].second};
        int x = 50000 - a[i].first;
        rotate(t, x);
    }
    for (int i = m; i < a.size(); i++) {
        if (a[i].first == 25000) continue;
        vector<int> t = {a[i].second};
        int x = 25000 - a[i].first;
        rotate(t, x);
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…