Cod sursa(job #2152450)

Utilizator DawlauAndrei Blahovici Dawlau Data 5 martie 2018 16:00:07
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<fstream>
#include<bitset>
using namespace std;
ifstream fin("nrcuv.in");
ofstream fout("nrcuv.out");
const int MOD = 104659, ALPHSZ = 26, NMAX = 1e3 + 5;

bitset<NMAX> alph[NMAX];

int wordsCnt[NMAX][NMAX];
int wordsLen, forbsCnt;

inline void readData(){

    fin >> wordsLen >> forbsCnt;

    char from, to;
    while(forbsCnt--){

        fin >> from >> to;
        alph[from - 'a'][to - 'a'] = true;
        alph[to - 'a'][from - 'a'] = true;
    }
}

inline int get_wordsCnt(){

    int length, letter, prevLetter, ans = 0;

    for(letter = 0; letter < 26; ++letter)
        wordsCnt[1][letter] = 1;

    for(length = 2; length <= wordsLen; ++length)
        for(letter = 0; letter < 26; ++ letter)
            for(prevLetter = 0; prevLetter < 26; ++prevLetter)
                if(alph[prevLetter][letter] == false)
                    wordsCnt[length][letter] = (wordsCnt[length][letter] + wordsCnt[length - 1][prevLetter]) % MOD;

    for(letter = 0; letter < 26; ++letter)
        ans = (ans + wordsCnt[wordsLen][letter]) % MOD;
    return ans;
}

int main(){

    readData();
    fout << get_wordsCnt();
}