Cod sursa(job #1537652)

Utilizator VisanCosminVisan Tudor Cosmin VisanCosmin Data 27 noiembrie 2015 18:34:01
Problema Lista lui Andrei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
#define MOD 104659

using namespace std;

int a[27][27]={{1}},b[27][27],n=2,m;
long long sum;
char c1,c2;

void inm(const int a[27][27],const int b[27][27],int c[27][27])
{
    int aux[27][27] = {{0}};

    for(int i = 0;i<26;i++)
        for(int j = 0;j<26;j++)
            for(int k = 0;k<26;k++)
                aux[i][j] = (aux[i][j] + a[i][k]*b[k][j])%MOD;

    for(int i = 0;i<26;i++)
        for(int j = 0;j<26;j++)
            c[i][j] = aux[i][j];
}

int main()
{

    ifstream fi("nrcuv.in");
    ofstream fo("nrcuv.out");

    fi>>n>>m;
    for(int i =0 ;i<26;i++)
    {
        for(int j=0;j<26;j++)
            a[i][j] = 1;
        //cout<<a[i][j]<<' ';
        //cout<<'\n';
    }


    for(int i = 0;i<m;i++)
    {
        fi>>c1>>c2;
        a[c1-'a'][c2-'a'] = 0;
        a[c2-'a'][c1-'a'] = 0;
    }

    for(int i = 0;i<26;i++)
        b[i][i] = 1;




    for(int i = 1;(1<<i)<=n;++i)
    {
        if( ((1<<i)&n )> 0 )
            inm(a,b,b);
        inm(a,a,a);

    }

    for(int i =0 ;i<26;i++)
    {
        for(int j=0;j<26;j++)
            sum = (sum + b[i][j])%MOD;
    }

    fo<<sum;


    fi.close();
    fo.close();


    return 0;
}