Cod sursa(job #1541924)

Utilizator SilviuIIon Silviu SilviuI Data 4 decembrie 2015 18:37:31
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#include <algorithm>
#include <vector>
#define mod 104659
using namespace std;
int n,m,i,j,k,l,dp[26][1005];
vector <int> line[26];
char s[1005],a,b;
int main() {
freopen("nrcuv.in","r",stdin);
freopen("nrcuv.out","w",stdout);
scanf("%d %d",&n,&m); gets(s);
for (i=1;i<=m;i++) {
    scanf("%c %c",&a,&b); gets(s);
    line[a-97].push_back(b-97); line[b-97].push_back(a-97);
}
for (i=0;i<26;i++) sort(line[i].begin(),line[i].end());
for (i=0;i<26;i++) dp[i][1]=1;
for (i=2;i<=n;i++) {
    for (j=0;j<26;j++) {
        int l=0;
        for (k=0;k<26;k++) {
            if (l<line[j].size() && k!=line[j][l]) dp[j][i]=(dp[j][i]+dp[k][i-1])%mod;
            if (l>=line[j].size()) dp[j][i]=(dp[j][i]+dp[k][i-1])%mod;
            while (l<line[j].size() && k==line[j][l]) l++;
        }
    }
}
int sol=0;
for (i=0;i<26;i++) sol=(sol+dp[i][n])%mod;
printf("%d",sol);
return 0;
}