Cod sursa(job #2038445)

Utilizator marvelousMarvelous marvelous Data 13 octombrie 2017 17:58:52
Problema Lista lui Andrei Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <bits/stdc++.h>

using namespace std;

ifstream F("nrcuv.in");
ofstream G("nrcuv.out");

int a[36][36], n, m, d[3][36], s;
const int MOD = 104659;
char c1, c2;

int main()
{
    F >> n >> m;
    for( int i = 0; i < m; ++ i )
    {
        F.get();
        F >> c1;
        F.get();
        F >> c2;
        a[ c1 - 'a' ][ c2 - 'a' ] = 1;
        a[ c2 - 'a' ][ c1 - 'a' ] = 1;
    }
    for( char j = 'a'; j <= 'z'; ++ j )
    {
        d[ 0 ][ j - 'a' ] = 1;
    }
    for( int i = 1; i <= n; ++ i )
    {
        if( i % 2 )
        {
            for( char k = 'a'; k <= 'z'; ++ k )
            {
                d[ 1 ][ k - 'a' ] = 0;
                for( char j = 'a'; j <= 'z'; ++ j )
                {
                    if( !a[ k - 'a' ][ j - 'a' ] )
                    {
                        d[ 1 ][ k - 'a' ] += d[ 0 ][ j - 'a' ];
                        if( d[ 1 ][ k - 'a' ] >= MOD ) d[ 1 ][ k - 'a' ] -= MOD;
                    }
                }
            }
            continue;
        }
        for( char k = 'a'; k <= 'z'; ++ k )
        {
            d[ 0 ][ k - 'a' ] = 0;
            for( char j = 'a'; j <= 'z'; ++ j )
            {
                if( !a[ k - 'a' ][ j - 'a' ] )
                {
                    d[ 0 ][ k - 'a' ] += d[ 1 ][ j - 'a' ];
                    if( d[ 0 ][ k - 'a' ] >= MOD ) d[ 0 ][ k - 'a' ] -= MOD;
                }
            }
        }
    }
    for( char j = 'a'; j <= 'z'; ++ j )
    {
        s += d[ 1 ][ j - 'a' ];
        if( s >= MOD ) s -= MOD;
    }
    G << s;
    return 0;
}