Cod sursa(job #1778015)

Utilizator nnnmmmcioltan alex nnnmmm Data 13 octombrie 2016 11:16:35
Problema Lista lui Andrei Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include<cstdio>
#include<vector>
std::vector<int> vecini['z'-'a'+1];

const int NMAX=1001,MOD=104659;

int d[NMAX]['z'-'a'+1];

void Initializare()
{
 int aux['z'-'a'+1];
 for(int i='a'-'a';i<='z'-'a';i++)
     {
      for(int j='a'-'a';j<='z'-'a';j++)
          aux[j]=1;
      for(int j=0;j<vecini[i].size();j++)
          if(aux[vecini[i][j]])
             aux[vecini[i][j]]=false;
      vecini[i].clear();
      for(int j='a'-'a';j<='z'-'a';j++)
          if(aux[j])
             vecini[i].push_back(j);
     }
}

int main()
{
 FILE *in=fopen("nrcuv.in","r");
 int n=0,m=0;
 fscanf(in,"%d %d ",&n,&m);
 for(int i=0;i<m;i++)
     {
      char x,y;
      fscanf(in,"%c %c ",&x,&y);
      vecini[x-'a'].push_back(y-'a');
     }
 fclose(in);

 Initializare();

 for(int j='a'-'a';j<='z'-'a';j++)
     d[1][j]=1;
 for(int i=2;i<=n;i++)
     {
      for(int j='a'-'a';j<='z'-'a';j++)
          {
           if(d[i][j]==0)
              continue;
           for(int k=0;k<vecini[j].size();k++)
               {
                d[i][k]+=d[i][j];
                d[i][k]%=MOD;
               }
          }
     }

 FILE *out=fopen("nrcuv.out","w");
 /*for(int i='a'-'a';i<='z'-'a';i++)
     {
      for(int j=0;j<vecini[i].size();j++)
          fprintf(out,"%d ",vecini[i][j]);
      fprintf(out,"\n");
     }*/
 int rasp=0;
 for(int j='a'-'a';j<='z'-'a';j++)
     {
      rasp+=d[n][j];
      rasp%=MOD;
     }
 fprintf(out,"%d\n",rasp);
 fclose(out);
}