Cod sursa(job #1921950)

Utilizator Storm_FireFox1Matei Gardus Storm_FireFox1 Data 10 martie 2017 15:28:18
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#include <string>

using namespace std;

ifstream fin("nrcuv.in");
ofstream fout("nrcuv.out");

const int MOD = 104659;
const int NMAX = 1000;
const int ALFABET = 26;

int lista[ALFABET + 1][ALFABET + 1];
long long d[NMAX + 1][ALFABET + 1];

int main()
{
    int n, m;
    fin >> n >> m;
    char a, b;
    string s;
    getline(fin, s);
    for(int i = 1; i <= m; i++) {
        getline(fin, s);
        int nr = 1;
        for(int j = 0; j < int(s.size()); ++j) {
            if(s[j] != ' ' && s[j] != '\n') {
                if(nr == 1) {
                    a = s[j];
                    nr++;
                } else if(nr == 2) {
                    b = s[j];
                    nr--;
                }
            }
        }
        lista[a - 96][b - 96] = 1;
        lista[b - 96][a - 96] = 1;
    }
    for(int i = 1; i <= 26; i++) {
        d[1][i] = 1;
    }
    for(int i = 2; i <= n; i++) {
        for(int j = 1; j <= 26; j++) {
            for(int k = 1; k <= 26; k++) {
                if(lista[j][k] == 0) {
                    d[i][j] = (d[i][j] + d[i - 1][k]) % MOD;
                }
            }
        }
    }
    int sum = 0;
    for(int i = 1; i <= 26; i++) {
        sum = (sum + d[n][i]) % MOD;
    }
    fout << sum << "\n";
    return 0;
}