Cod sursa(job #2039296)

Utilizator marvelousMarvelous marvelous Data 14 octombrie 2017 13:18:36
Problema Lista lui Andrei Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 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];
long long s;
const int MOD = 104659;
char c1, c2;

int main()
{
    F >> n >> m;
    if( n == 1 )
    {
        G << 26;
        return 0;
    }
    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 = 2; i <= n; ++ i )
    {
        if( i % 2 == 0 )
        {
            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[ 1 ][ k - 'a' ] % MOD + d[ 0 ][ j - 'a' ] % MOD ) % 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[ 0 ][ k - 'a' ] % MOD + d[ 1 ][ j - 'a' ] % MOD ) % MOD;
                }
            }
        }
    }
    if( m % 2 )
    {
        for( char j = 'a'; j <= 'z'; ++ j )
        {
            s = ( d[ 1 ][ j - 'a' ] % MOD + s % MOD ) % MOD;
        }
        G << s;
        return 0;
    }
    for( char j = 'a'; j <= 'z'; ++ j )
    {
        s = ( d[ 0 ][ j - 'a' ] % MOD + s % MOD ) % MOD;
    }
    G << s;
    return 0;
}