Mai intai trebuie sa te autentifici.

Cod sursa(job #1783463)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 19 octombrie 2016 00:28:59
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda cerculdeinfo-lectia3-programaredinamica1 Marime 1.26 kb
#include <cstdio>
#include <algorithm>
#define MAX 12000000
#define MOD 104659
#define INF 6000000005
using namespace std;
   
char f[MAX],a1,a2;
int  pos=0,N,M;
bool v[27][27];
int map[1005][27];
void r(int &nr)
{
    nr=0;
    while(f[pos]<'0'||f[pos]>'9')
        pos++;
    while(f[pos]>='0'&&f[pos]<='9')
        nr=nr*10+f[pos++]-'0';
}
void rch(char &ch)
{
    while(f[pos]<'a'||f[pos]>'z')
        pos++;
    ch=f[pos++];
}
int main()
{
    freopen("nrcuv.in","r",stdin);
    freopen("nrcuv.out","w",stdout);
    fread(f,1,MAX,stdin);
    r(N);r(M);
    for(int i=1;i<=26;i++)
        for(int j=1;j<=26;j++)
            v[i][j]=1;
    for(int i=1;i<=M;i++)
    {
        rch(a1);rch(a2);
        a1-='a'-1;
        a2-='a'-1;
        v[a1][a2]=v[a2][a1]=0;
    }
    for(int i=1;i<=26;i++)
        for(int j=1;j<=26;j++)
            map[1][i]+=v[i][j];
    for(int i=2;i<N;i++)
    {
        for(int j=1;j<=26;j++)
            for(int k=1;k<=26;k++)
                if(v[j][k])
                    map[i][j]=(map[i][j]+map[i-1][k])%MOD;
    }
    int S=0;
    if(N==1)
        printf("26");
    else
    {
        for(int i=1;i<=26;i++)
            S=(S+map[N-1][i])%MOD;
        printf("%d",S);
    }
    return 0;
}