Cod sursa(job #36865)

Utilizator flo_demonBunau Florin flo_demon Data 24 martie 2007 11:16:10
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <stdio.h>

#define MAX 2000007

using namespace std;

int n, m, L, S, X, Y, Z, V;
int aux[MAX], pivot, v_aux;
int countt, d_now, t_now, d_prev, t_prev;

void quickSort(int st, int dr);

int main()
{
    FILE *fin = fopen("toys.in", "r");
    fscanf(fin, "%d%d%d", &n, &L, &m);
    fscanf(fin, "%d%d%d%d%d", &S, &X, &Y, &Z, &V);
    d_prev = S;
    t_prev = 1;
    aux[1] = S;
    countt++;
    for (int i = 2; i <= n; ++i)
    {
        d_now = (X * d_prev + Y * (i-1)) % (L - 1) + 1;
        t_now = (Z * d_prev + V * (i-1)) % 2; 
        if (t_now == 1)
        {
            aux[i] = d_now;
            countt++;
        }
        else
            aux[i] = (2*L - d_now); 
        d_prev = d_now;
        t_prev = t_now;
    }
    
    
    quickSort(1, n);
    aux[0] = 0;
    
    long long rez = (long long)(m / n) * ((long long)2 * (long long)L);
    rez += (long long)aux[countt];
    FILE *fout = fopen("toys.out", "w");
    fprintf(fout, "%lld\n", rez);
    fclose(fout);
    
    return 0;
}

void quickSort(int st, int dr)
{
    long long i = st - 1, j = dr + 1;
    pivot = aux[st];
    do
    {
        do { i++; } while (pivot > aux[i]);
        do { j--; } while (pivot < aux[j]);
        if (i <= j)
        {
            v_aux = aux[i];
            aux[i] = aux[j];
            aux[j] = v_aux;
        }
    } while (i <= j);
    
    if (i < dr) quickSort(i, dr);
    if (j > st) quickSort(st, j);
}