Cod sursa(job #1717411)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 14 iunie 2016 20:14:23
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 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;
}