Cod sursa(job #2087896)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 14 decembrie 2017 15:00:06
Problema Lista lui Andrei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("q.in");
ofstream cout("q.out");
const int lmax=26,mod=104659,nmax=1000;
bool pot[lmax+5][lmax];
vector<int>v[lmax+5];
int l[lmax+5];
int dp[nmax+5][lmax+5];
int n,k;
char a,b;
int main()
{
    cin>>n>>k;
    for(int i=0;i<lmax;i++)
        for(int j=0;j<lmax;j++)
            pot[i][j]=1;
    for(int i=1;i<=k;i++)
    {
        cin>>a>>b;
        pot[a-'a'][b-'a']=pot[b-'a'][a-'a']=0;
    }
    for(int i=0;i<lmax;i++)
        for(int j=0;j<lmax;j++)
            if(pot[i][j]==1)
                v[i].push_back(j);
    for(int i=0;i<lmax;i++)
        l[i]=v[i].size();
    for(int i=0;i<lmax;i++)
        dp[1][i]=1;
    for(int i=2;i<=n;i++)
    {
        for(int j=0;j<lmax;j++)
            for(int k=0;k<l[j];k++)
            {
                ///j, v[j][k]
                dp[i][v[j][k]]+=dp[i-1][j];
                if(dp[i][v[j][k]]>mod)
                    dp[i][v[j][k]]-=mod;
            }
    }
    int sol=0;
    for(int i=0;i<lmax;i++)
        sol=(sol+dp[n][i])%mod;
    cout<<sol;
    return 0;
}
/**
**/