3092 2023. 02. 15 16:05:58 peter Előzések cpp17 Wrong answer 0/100 96ms 9868 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]);
    }
    for (int i = 0; i < overtakesCount; 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]]]]++;

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





    free(driverOvertakenCount[0]);
    free(driverOvertakenCount[1]);
    free(driverOvertakenCount);
    free(overtakes);
    free(driverNums);
    return 0;
}
Subtask Sum Test Verdict Time Memory
subtask1 0/0
1 Wrong answer 3ms 1288 KiB
subtask2 0/30
2 Wrong answer 3ms 1620 KiB
3 Wrong answer 2ms 1712 KiB
4 Wrong answer 3ms 2028 KiB
5 Wrong answer 3ms 2180 KiB
6 Wrong answer 3ms 2500 KiB
7 Wrong answer 3ms 2460 KiB
subtask3 0/70
8 Wrong answer 32ms 4044 KiB
9 Wrong answer 46ms 5520 KiB
10 Wrong answer 57ms 5944 KiB
11 Wrong answer 46ms 6400 KiB
12 Wrong answer 57ms 7192 KiB
13 Wrong answer 72ms 7696 KiB
14 Wrong answer 76ms 8468 KiB
15 Wrong answer 96ms 9488 KiB
16 Wrong answer 89ms 9320 KiB
17 Wrong answer 96ms 9644 KiB
18 Wrong answer 96ms 9868 KiB
19 Wrong answer 64ms 8988 KiB
20 Wrong answer 92ms 9444 KiB
21 Wrong answer 90ms 9644 KiB