Pagini recente » Cod sursa (job #655402) | Cod sursa (job #2817141) | Cod sursa (job #1224254) | Cod sursa (job #3169876) | Cod sursa (job #1843149)
#include <stdio.h>
FILE *fi, *fo;
#define MAXN 1000003
#define MOD 666013
int v[MAXN], lista[MOD], next[MAXN];
void adauga( long long x, int p ) {
v[p] = x;
next[p] = lista[x%MOD];
lista[x%MOD] = p;
}
void sterge( long long x ) {
int p;
p = lista[x%MOD];
if ( v[p] == x )
lista[x%MOD] = next[p];
else {
while ( v[next[p]] != x && next[p] != 0 )
p = next[p];
if ( v[next[p]] == x )
next[p] = next[next[p]];
}
}
bool cauta(long long x) {
int p;
p = lista[x%MOD];
while ( p != 0 && v[p] != x )
p = next[p];
return v[p] == x;
}
long long N, M;
long long A, B, C, D, E;
long long V;
int main() {
fi = fopen("muzica.in", "r");
fo = fopen("muzica.out", "w");
fscanf(fi, "%lld%lld", &N, &M);
fscanf(fi, "%lld%lld%lld%lld%lld", &A, &B, &C, &D, &E);
for(int i = 1;i <= N;i++) {
fscanf(fi, "%d", &V);
adauga(V, i);
}
long long a1, a2;
a1 = A;
a2 = B;
int rez = 0;
rez += cauta(a1);
sterge(a1);
rez += cauta(a2);
sterge(a2);
for(int i = 3;i <= M && rez <= N;i++) {
long long Cur;
Cur = ((C * a2 + D * a1)) % E;
if(cauta(Cur)) {
rez++;
sterge(Cur);
}
a1 = a2;
a2 = Cur;
}
fprintf(fo, "%d", rez);
fclose(fi);
fclose(fo);
return 0;
}