Cod sursa(job #3360934)

Utilizator RegeleOu3433Calin V. Dragos Andrei RegeleOu3433 Data 17 iulie 2026 16:23:48
Problema Sum Scor 0
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <stdio.h>
#define MAXP 100000

int sir[MAXP] , el[MAXP];
int main () {
    FILE *fin , *fout;
    int k , p , i , j , maxj , nru , nrn , maxe , maxpz;
    long long maxp , minu;

    fin = fopen ( "lss.in" , "r" );
    fscanf ( fin , "%d%d" , &k , &p );

    for ( i = 0 ; i < p ; i++ )
        fscanf ( fin , "%d" , &el[i] );
    fclose ( fin );

    for ( i = p - 1 ; i > 0 ; i-- ) {
        maxe = el[0];
        maxpz = 0;
        for ( j = 1 ; j <= i ; j++ )
            if ( el[j] > maxe ) {
                maxe = el[j];
                maxpz = j;
            }
        el[maxpz] = el[i];
        el[i] = maxe;
    }
    for ( i = 0 ; i < p ; i++ )
        sir[i] = ( el[i] - 1 ) % k + 1;

    minu = 0;
    for ( i = 0 ; i < p ; i++ ) {
        maxp = -k - 1;
        maxj = nru = nrn = 0;
        for ( j = p - 1 ; j >= 0 ; j-- ) {
            if ( sir[j] != 0 ) {
                if ( ( long long ) nrn - ( long long ) k * nru - sir[j] > maxp ) {
                    maxp = ( long long ) nrn - ( long long ) k * nru - sir[j];
                    maxj = j;
                }
                if ( sir[j] == 1 )
                    nru++;
                nrn++;
            }
        }
        minu = minu + sir[maxj];
        sir[maxj] = 0;
        for ( j = maxj + 1 ; j < p ; j++ ) {
            if ( sir[j] != 0 ) {
                sir[j]--;
                if ( sir[j] == 0 )
                    sir[j] = sir[j] + k;
            }
        }
    }
    fout = fopen ( "lss.out" , "w" );
    fprintf ( fout , "%lld\n" , minu );
    fclose ( fout );

    return 0;
}