Cod sursa(job #477842)

Utilizator mlazariLazari Mihai mlazari Data 16 august 2010 14:21:06
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<fstream>

using namespace std;

#define LMAX ('z'-'a'+1)
#define MOD 104659

ifstream fi("nrcuv.in");
ofstream fo("nrcuv.out");

bool a[LMAX][LMAX];
char l1,l2;
int n,m,i,j,k,rez;
int *nc,*np,*aux;

int main() {
  fi>>n>>m;
  while(m--) {
    fi>>l1>>l2;
    a[l1-'a'][l2-'a']=a[l2-'a'][l1-'a']=true;
  }
  nc=new int[LMAX];
  np=new int[LMAX];
  for(i=0;i<LMAX;++i) nc[i]=1;
  for(i=2;i<=n;++i) {
    aux=nc,nc=np,np=aux;
    for(j=0;j<LMAX;++j) {
      nc[j]=0;
      for(k=0;k<LMAX;++k)
       if(!a[j][k]) {
         nc[j]+=np[k];
         if(nc[j]>MOD) nc[j]-=MOD;
       }
    }
  }
  for(i=0;i<LMAX;++i) {
    rez+=nc[i];
    if(rez>MOD) rez-=MOD;
  }
  fo<<rez<<"\n";
  return 0;
}