Cod sursa(job #766951)

Utilizator vendettaSalajan Razvan vendetta Data 12 iulie 2012 15:12:19
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>

using namespace std;

#define nmax 1005
#define wmax 250

ifstream f("nrcuv.in");
ofstream g("nrcuv.out");

int n, p, viz[wmax][wmax], dp[nmax][wmax];

void citeste(){

    f >> n >> p;
    for(int i=1; i<=p; i++){
        char a, b;
        f >> a >> b;
        viz[a][b] = 1;
        viz[b][a] = 1;
    }

}

void rezolva(){

    //dp[i][j] = numarul de siruri de lungime i care au pe ultima pozitie litera j;
    for(int i='a'; i<='z'; i++) dp[1][i] = 1;

    for(int i=2; i<=n; i++){
        for(int j='a'; j<='z'; j++){
            for(int k='a'; k<='z'; k++){
                if (viz[j][k] == 1) continue;
                dp[i][j] += dp[i-1][k];
                if (dp[i][j] >= 104659) dp[i][j] = dp[i][j] % 104659;
            }
        }
    }

    int rez = 0;
    for(int i='a'; i<='z'; i++){
        rez += dp[n][i];
        if (rez >= 104659) rez = rez % 104659;
    }

    g << rez << "\n";

}

int main(){

    citeste();
    rezolva();

    f.close();
    g.close();

    return 0;

}