제출 #847672

#제출 시각아이디문제언어결과실행 시간메모리
847672heavylightdecompChoreography (IOI23_choreography)C++17
59 / 100
69 ms6368 KiB
#include<bits/stdc++.h>
using namespace std;
const long long maxn = 1e5+5;
long long N;
struct row {
    vector<int> ar;
    int ch, ech;
    friend void swap(row &a, row &b) {
        a.ar.swap(b.ar);
        swap(a.ch, b.ch);
        swap(a.ech, b.ech);
    }
};
row x,y;
void init(int n, vector<int> p) {
    N = n;
    x.ar = vector<int>(N);
    y.ar = vector<int>(N);
    for(int i = 0; i < N; i++) {
        x.ar[i] = p[i]; // x to y
        y.ar[p[i]] = i; // y to x
    }
}
int fix(long long c) {
    c += maxn * N;
    return c % N;

}
void move_right(int K) {
    x.ch += K;
}
void move_left(int K) {
    x.ch -= K;
}
void swap_places() {
    x.ech += (x.ech + x.ch % 2) ? -1 : 1;
}
void move_around() {
    swap(x,y);
}

int get_position(int D) {
    /*
    Careful! 
    x[i] represents p[i+s mod N]
    x[i-s mod N] represents p[i], the intended value
    same for y
    */
    int ce = fix(D - y.ch - y.ech);
    int co = fix(D - y.ch + y.ech);
    int yp = -1;
    if(ce % 2 == 0) {
        yp = ce;
    } else {
        yp = co;
    }
    return fix(y.ar[yp] + x.ch + ((y.ar[yp] % 2) ? -x.ech : x.ech));  
}
#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...