Cod sursa(job #829154)

Utilizator Victor10Oltean Victor Victor10 Data 4 decembrie 2012 21:42:59
Problema Hashuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
#define MOD 201203
 
vector <int> v [2] [MOD + 5];
 
int find (int x, int poz, bool h)
{
    int n, i;
    n = v [h] [poz] . size ();
    for (i = 0; i < n; ++ i)
        if (v [h] [poz] [i] == x) return i;
    return -1;
}
int main()
{
    ifstream f("muzica.in");
    ofstream g("muzica.out");
 
    int n, m, i, poz, answ = 0, pozx, pozx2;
	long long nr1, nr2, nr3, C, D, E;
    f >> n >> m;
    f >> nr1 >> nr2 >> C >> D >> E;
 
    for (i = 0; i < n; ++ i)
    {
        f >> nr3;
        poz = nr3 % MOD;
        v [0] [poz] . push_back (nr3);
    }
 
    poz = nr1 % MOD;
    pozx = find (nr1, poz, 0);
    if (pozx != -1)
    {
        ++ answ;
		//cout << nr1 << " ";
    }
	v [1] [poz] . push_back (nr1);
 
    poz = nr2 % MOD;
    pozx = find (nr2, poz, 0);
	pozx2 = find (nr2, poz, 1);
    if (pozx != -1 && pozx2 == -1)
    {
        ++ answ;
		//cout << nr2 << " "; 
    }
	if (pozx2 == -1) v [1] [poz] . push_back (nr2);

    for (i = 0; i < m - 2; ++ i)
    {
		//nr3 = (C * nr2 + D * nr1) % E;
        poz = nr3 % MOD;
        pozx = find (nr3, poz, 0);
		pozx2 = find (nr3, poz, 1);
        if (pozx2 == -1 && pozx != -1)
        {
            ++ answ;
			//cout << nr3 << " ";
        }
		if (pozx2 == -1) v [1] [poz] . push_back (nr3);
        nr1 = nr2;
        nr2 = nr3;
    }
 
    g << answ;
    g << '\n';
 
    return 0;
}