19212022-12-10 17:34:51KovácsHunorForma-1cpp17Futási hiba 0/1002.081s4156 KiB
#include "stdio.h"
#include "stdlib.h"

long long compare(const void* a, const void* b){
    return *(long long*)a-*(long long*)b;
}

void QuickSort(long long* arr, long long* index, long long size){
    long long pivot = 0;
    for (long long i = 1; i < size; i++)
    {
        if(arr[pivot] < arr[i] || (arr[pivot] == arr[i] && index[pivot] > index[i])){
            arr[pivot] ^= arr[pivot+1];
            arr[pivot+1] ^= arr[pivot];
            arr[pivot] ^= arr[pivot+1];

            index[pivot] ^= index[pivot+1];
            index[pivot+1] ^= index[pivot];
            index[pivot] ^= index[pivot+1];
            pivot++;

            if(i != pivot){
                arr[pivot-1] ^= arr[i];
                arr[i] ^= arr[pivot-1];
                arr[pivot-1] ^= arr[i];

                index[pivot-1] ^= index[i];
                index[i] ^= index[pivot-1];
                index[pivot-1] ^= index[i];
            }
        }
    }
    if(pivot > 1)        QuickSort(arr, index, pivot);
    if(pivot < size-2) QuickSort(arr + (pivot+1), index + (pivot+1), size - (pivot+1));
}

long long distance(long long a, long long b, long long c, long long t){
    return t*t*a + t*b + c;
}

int main()
{
    long long n, q;
    scanf("%lld", &n);
    long long* arr = (long long*)malloc(sizeof(long long)*n*3);
    for (long long i = 0; i < n; i++)
    {
        scanf("%lld%lld%lld", arr + i, arr + i + n, arr + i + 2*n);
    }
    scanf("%lld", &q);
    int* sol = (int*)malloc(sizeof(int)*q);
    long long* dis = (long long*)malloc(sizeof(long long)*n);
    long long* index = (long long*)malloc(sizeof(long long)*n);

    for (long long i = 0; i < q; i++)
    {
        long long p, t;
        scanf("%lld%lld", &p, &t);
        for (long long j = 0; j < n; j++)
        {
            index[j] = j+1;
        }
        for (long long j = 0; j < n; j++)
        {
            dis[j] = distance(arr[j], arr[j+n], arr[j+2*n], t);
        }

        QuickSort(dis, index, n);
        sol[i] = (int)index[p-1];
    }
    for (long long i = 0; i < q; i++)
    {
        printf("%d\n", sol[i]);
    }
    free(arr);
    free(sol);
    free(dis);
    return 1;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Futási hiba3ms1292 KiB
subtask20/20
2Futási hiba82ms2912 KiB
3Futási hiba86ms3220 KiB
4Futási hiba82ms3344 KiB
5Futási hiba79ms3420 KiB
6Futási hiba83ms3400 KiB
7Futási hiba82ms3640 KiB
8Futási hiba82ms3756 KiB
9Futási hiba81ms3948 KiB
subtask30/30
10Időlimit túllépés2.052s3008 KiB
11Időlimit túllépés2.015s2808 KiB
12Időlimit túllépés2.063s2768 KiB
13Időlimit túllépés2.039s3032 KiB
14Időlimit túllépés2.052s3388 KiB
15Időlimit túllépés2.063s3256 KiB
16Időlimit túllépés2.068s2880 KiB
17Időlimit túllépés2.063s3404 KiB
18Időlimit túllépés2.055s3332 KiB
subtask40/50
19Időlimit túllépés2.028s3512 KiB
20Időlimit túllépés2.055s3520 KiB
21Időlimit túllépés2.079s3440 KiB
22Időlimit túllépés2.063s3468 KiB
23Időlimit túllépés2.052s3428 KiB
24Időlimit túllépés2.072s4020 KiB
25Időlimit túllépés2.069s3896 KiB
26Időlimit túllépés2.072s3660 KiB
27Időlimit túllépés2.049s3868 KiB
28Időlimit túllépés2.059s3648 KiB
29Időlimit túllépés2.081s4156 KiB
30Időlimit túllépés2.061s3952 KiB