Pagini recente » Cod sursa (job #1042864) | Cod sursa (job #2503983) | Cod sursa (job #2763124) | Cod sursa (job #3000207) | Cod sursa (job #36865)
Cod sursa(job #36865)
#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);
}