제출 #1354637

#제출 시각아이디문제언어결과실행 시간메모리
1354637am_aadvikRotating Lines (APIO25_rotate)C++20
5 / 100
0 ms836 KiB
#define _CRT_SECURE_NO_WARNINGS
#include <vector>
using namespace std;
#define SUBMIT 1
void energy(int n, vector<int> v);
void rotate(vector<int> t, int x);

void energy(int n, vector<int> v) {
    int nw1 = (v[0] + 25000) % 100000;
    int d = (nw1 + 100000 - v[1]) % 100000;
    rotate({ 1 }, d);
}

//grader
#if SUBMIT == 0
#include <cstdio>
#include <cstdlib>
#include <set>
static int total_cost = 0;
static vector<int> v;
static FILE* file_log;

static void printf_vector(vector<int> vec) {
    printf("[");
    for (int i = 0; i < (int)vec.size(); i++) {
        if (i > 0) printf(", ");
        printf("%d", vec[i]);
    }
    printf("]");
}
static long long calc_energy() {
    long long res = 0;
    for (int i = 0; i < (int)v.size(); i++) {
        for (int j = i + 1; j < (int)v.size(); j++) {
            int d = abs(v[i] - v[j]);
            res += min(d, 50000 - d);
        }
    }
    return res;
}

static long long last_energy;
void rotate(vector<int> t, int x) {
    int k = (int)t.size();
    total_cost += k;

    if (total_cost > 2000000) {
        printf("Too many rotations\n");
        exit(0);
    }

    set<int> seen;
    for (int i = 0; i < k; i++) {
        if (t[i] < 0 || t[i] >= (int)v.size()) {
            printf("Invalid index\n");
            exit(0);
        }
        if (seen.find(t[i]) != seen.end()) {
            printf("t has duplicate element\n");
            exit(0);
        }
        v[t[i]] = (v[t[i]] + x) % 50000;
        seen.insert(t[i]);
    }

    printf("rotate(");
    printf_vector(t);
    printf(", %d)\n", x);

    printf("v <- ");
    printf_vector(v);
    printf("\n");

    long long cur_energy = calc_energy();
    printf("New energy: %lld\n", cur_energy);
    printf("\n");

    if (cur_energy < last_energy) {
        printf("Energy decreased\n");
        exit(0);
    }

    last_energy = cur_energy;
}
int main() {
    int n;
    scanf("%d", &n);

    v.resize(n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &v[i]);
    }

    last_energy = calc_energy();

    file_log = fopen("log.txt", "w");
    printf("Initial energy: %lld\n\n", last_energy);

    energy(n, v);

    fclose(file_log);

    printf("%lld\n", calc_energy());

    return 0;
}
#endif
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…