3094 2023. 02. 15 16:27:11 peter Előzések cpp17 Elfogadva 100/100 97ms 9300 KiB
#include <stdlib.h>
#include <stdio.h>

int main() {
    int driversCount, overtakesCount;
    scanf("%d%d", &driversCount, &overtakesCount);

    int* driverNums = (int*)malloc(sizeof(int) * (driversCount + 1)); // tömb indexelése = sorrend, tömb elemei = versenyző száma
    int** driverOvertakenCount = (int**)malloc(sizeof(int*) * 2); // tömb indexelése = versenyző száma, tömb elemei = index a driverNums tömbben (sorrend)
                                                                  // második dimenzió = hányszor előzték meg
    driverOvertakenCount[0] = (int*)malloc(sizeof(int) * (driversCount + 1));
    driverOvertakenCount[1] = (int*)calloc(driversCount + 1, sizeof(int));
    for (int i = 1; i <= driversCount; i++)
    {
        scanf("%d", &driverNums[i]);
        driverOvertakenCount[0][driverNums[i]] = i;
    }

    int* overtakes = (int*)malloc(sizeof(int) * overtakesCount);
    int mostOvertaken[] = { 0, 0 }; // versenyző száma, megelőzések száma
    for (int i = 0; i < overtakesCount; i++)
    {
        scanf("%d", &overtakes[i]);

        int swap = driverNums[driverOvertakenCount[0][overtakes[i]]];
        driverNums[driverOvertakenCount[0][overtakes[i]]] = driverNums[driverOvertakenCount[0][overtakes[i]] - 1];
        driverNums[driverOvertakenCount[0][overtakes[i]] - 1] = swap;


        swap = driverOvertakenCount[0][driverNums[driverOvertakenCount[0][overtakes[i]]]];
        driverOvertakenCount[0][driverNums[driverOvertakenCount[0][overtakes[i]]]] = driverOvertakenCount[0][overtakes[i]];
        driverOvertakenCount[0][overtakes[i]] = swap;

        driverOvertakenCount[1][driverNums[driverOvertakenCount[0][overtakes[i]] + 1]]++;

        if (driverOvertakenCount[1][driverNums[driverOvertakenCount[0][overtakes[i]] + 1]] > mostOvertaken[1])
        {
            mostOvertaken[0] = driverNums[driverOvertakenCount[0][overtakes[i]] + 1];
            mostOvertaken[1] = driverOvertakenCount[1][driverNums[driverOvertakenCount[0][overtakes[i]] + 1]];
        }
        else if (driverOvertakenCount[1][driverNums[driverOvertakenCount[0][overtakes[i]] + 1]] == mostOvertaken[1]
                && driverNums[driverOvertakenCount[0][overtakes[i]] + 1] < mostOvertaken[0])
        {
            mostOvertaken[0] = driverNums[driverOvertakenCount[0][overtakes[i]] + 1];
        }
        
        printf("%d\n", mostOvertaken[0]);
    }
    

    free(driverOvertakenCount[0]);
    free(driverOvertakenCount[1]);
    free(driverOvertakenCount);
    free(overtakes);
    free(driverNums);
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1236 KiB
subtask2 30/30
2 Elfogadva 2ms 1500 KiB
3 Elfogadva 2ms 1568 KiB
4 Elfogadva 3ms 1764 KiB
5 Elfogadva 3ms 1624 KiB
6 Elfogadva 3ms 1836 KiB
7 Elfogadva 3ms 1848 KiB
subtask3 70/70
8 Elfogadva 32ms 3368 KiB
9 Elfogadva 46ms 4468 KiB
10 Elfogadva 57ms 5192 KiB
11 Elfogadva 46ms 5488 KiB
12 Elfogadva 59ms 6380 KiB
13 Elfogadva 74ms 7168 KiB
14 Elfogadva 76ms 8216 KiB
15 Elfogadva 94ms 9300 KiB
16 Elfogadva 89ms 8892 KiB
17 Elfogadva 97ms 9164 KiB
18 Elfogadva 96ms 9212 KiB
19 Elfogadva 64ms 8308 KiB
20 Elfogadva 96ms 8828 KiB
21 Elfogadva 93ms 9044 KiB