Cod sursa(job #2336849)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 5 februarie 2019 16:40:27
Problema Lista lui Andrei Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

int dp[2][26];
bool car[26][26];

const int MOD = 104659;

void add (int &a, int b) {
  a += b;
  if (a >= MOD)
    a -= MOD;
}

int main() {
  int n, m, sol, i;
  char a, b, next, last, c;
  freopen ("nrcuv.in", "r", stdin);
  freopen ("nrcuv.out", "w", stdout);
  scanf ("%d%d\n", &n, &m);
  for (i = 1; i <= m; i++) {
    scanf ("%c %c\n", &a, &b);
    a -= 'a';
    b -= 'a';
    car[a][b] = car[b][a] = 1;
  }
  for (c = 0; c < 26; c++)
    dp[1][c] = 1;
  for (i = 2; i <= n; i++)
    for (next = 0; next < 26; next++) {
      dp[i % 2][next] = 0;
      for (last = 0; last < 26; last++)
        if (car[next][last] == 0)
          add (dp[i % 2][next], dp[1 - i % 2][last]);
    }
  sol = 0;
  for (c = 0; c < 26; c++)
    add (sol, dp[n % 2][c]);
  printf ("%d\n", sol);
  return 0;
}