Cod sursa(job #2453901)

Utilizator bluestorm57Vasile T bluestorm57 Data 6 septembrie 2019 14:29:26
Problema Lista lui Andrei Scor 15
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("nrcuv.in");
ofstream g("nrcuv.out");

const int NMAX = 30;
const int mod = 104659;
int n,m,nr;
vector <int> v[NMAX];

int convert(char x){
    int intx = x;
    return int(intx - 'a' + 1);
}

void dfs(int node, int length){
    if(length == n)
        nr++;
    if(length < n)
        for(auto it: v[node]){
            dfs(it, length + 1);
        }
}

int main(){
    int i,j,xx,yy,maxn = -1;
    unsigned long long p = 1, previous;
    char x,y;
    f >> n >> m;
    for(i = 1 ; i <= m ; i++){
        f >> x >> y;
        xx = convert(x);
        yy = convert(y);
        v[xx].push_back(yy);
        v[yy].push_back(xx);
        maxn = max(maxn, max(xx,yy));
    }
    for(i = 1 ; i <= maxn ; i++){
        sort(v[i].begin(), v[i].end());
        for(j = 1 ; j < v[i].size() ; j++)
            if(v[i][j - 1] == v[i][j]){
                v[i].erase(v[i].begin() + j);
                j--;
            }
    }

    for(i = 1 ; i <= maxn ; i++)
        if(!v[i].empty()){
            dfs(i, 1);
        }

    for(i = 1 ; i <= n ; i++){
        p *= 26;

        if(p >= mod){
            previous = p;
            p %= mod;
        }
    }
    if(nr <= p)
        g << p - nr;
    else
        g << (previous - nr) % mod;

    return 0;
}