Cod sursa(job #2057960)

Utilizator liviu2000Dragomirescu Liviu liviu2000 Data 4 noiembrie 2017 22:06:43
Problema Lista lui Andrei Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

vector <pair <char,char> >rest ;
int mat[1001][27] ;

bool compara ( pair<char,char> c1 , pair<char,char> c2 )
{
    if ( c1.first == c2.first )
        return c1.second < c2.second ;
    return c1.first < c2.first ;
}

int main()
{
    int i , j , n , m , k , suma = 0 ;
    char c1 , c2 ;
    ifstream fin ("nrcuv.in") ;
    ofstream fout ("nrcuv.out") ;
    fin >> n >> m ;
    for ( i = 1 ; i <= m ; i++ )
    {
        fin >> c1 >> c2 ;
        rest.push_back(make_pair(c1,c2)) ;
    }
    sort(rest.begin(),rest.end(),compara) ;
    for ( i = 0 ; i < m - 1 ; i++ )
    {
        if ( rest[i].first == rest[i+1].first && rest[i].second == rest[i+1].second )
            rest.erase(rest.begin()+i) ;
        if ( rest[i].first == rest[i+1].second && rest[i].second == rest[i+1].first )
            rest.erase(rest.begin()+i) ;
    }
    for ( i = 1 ; i <= 26 ; i++ )
        mat[1][i] = 1 ;
    for ( i = 2 ; i <= n ; i++ )
    {
        for ( j = 1 ; j <= 26 ; j++ )
        {
            mat[i][j] = mat[i-1][j] + 26 ;
            for ( k = 0 ; k <= rest.size() ; k++ )
            {
                if ( rest[k].second - 96 == j )
                    mat[i][j] = mat[i][j] - 2 ;
                if ( rest[k].first == rest[k].second && rest[k].second - 96 == j )
                    mat[i][j]++ ;
            }
        }
    }
    for ( i = 1 ; i <= 26 ; i++ )
    {
        suma = suma + mat[n][i] ;
        suma = suma % 104659 ;
    }
    fout << suma ;
}