Cod sursa(job #1251924)

Utilizator mgntMarius B mgnt Data 30 octombrie 2014 00:56:06
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include <string>

bool
demo
()
{ bool  x[26][26];
  unsigned  c[1001][26];
  
  ::std::size_t  s;
  ::std::size_t  k;
  for(k=0; 26>k; ++k)
  { for(s=0; 26>s; ++s)
    { x[k][s] = true;
    }
  }
  
  ::std::ifstream  is("nrcuv.in");
  ::std::size_t  N;
  ::std::size_t  M;
  is >> N >> M;
  
  ::std::string  u;
  ::std::string  w;
  ::std::size_t  i;
  for(i=0; M>i; ++i)
  { is >> u >> w;
    s = (u.at(0) - 'a');
    k = (w.at(0) - 'a');
    x[k][s] = false;
    x[s][k] = false;
  }
  
  unsigned  const m = 104659;
  
  for(k=0; 26>k; ++k)
  { c[1][k] = 1;
  }
  
  unsigned  e;
  for(i=2; N>=i; ++i)
  { for(k=0; 26>k; ++k)
    { e = 0;
      for(s=0; 26>s; ++s)
      { if(x[k][s])
        { e += c[i-1][s];
          e %= m;
        }
      }
      c[i][k] = e;
    }
  }
  
  e = 0;
  for(k=0; 26>k; ++k)
  { e += c[N][k];
    e %= m;
  }
  
  ::std::ofstream  os("nrcuv.out");
  os << e << '\n';
  
  return true; // Success.
}

int
main
()
{ int  status;
  try
  { bool  const ok = demo();
    status = ( ok ? 0 : 1 );
  }
  catch ( ... )
  { status = 2;
  }
  return status;
}