Cod sursa(job #890283)

Utilizator mads2194FMI - Andrei Stroe mads2194 Data 24 februarie 2013 23:09:04
Problema Lista lui Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.95 kb
#include<cstdio>
#include<vector>

using namespace std;

#define N 1001
#define C int(int('z')-int('a'))+1
#define M 104659

int n;
vector <int> a[C];

long D[N][C];
long res;

bool vf[30][30];

int val(char c)
{
    return int(c)-int('a')+1;
}

bool check(int x,int y)
{
    for(size_t i=0;i<a[x].size();++i)
        if(a[x][i]==y) return 0;
    return 1;
}

void read()
{
    int x,y;
    char xc,yc;
    int m;


    scanf("%d %d\n",&n,&m);
    while(m--)
        {
            scanf("%c %c\n",&xc,&yc);
            x=val(xc);
            y=val(yc);

            vf[x][y]=1;
            vf[y][x]=1;
            /*if(check(x,y))
            {
                //printf("%d %d\n",x,y);
                if(x==y) a[x].push_back(y);
                else
                {
                    a[x].push_back(y);
                    a[y].push_back(x);
                }
            }*/
        }

    for(int i=1;i<=26;++i)
        for(int j=1;j<=26;++j)
            if(vf[i][j]==0)
            {
                a[i].push_back(j);
                //a[j].push_back(i);
                //printf("%d %d\n",i,j);
            }
}

long query(int niv, int pos)
{
    long sum=0;
    //printf("%d: ",pos);
    for(size_t i=0;i<a[pos].size();++i)
    {
        sum += D[niv][a[pos][i]];
        //printf(" %d", a[pos][i]);
    }
    //printf("\n ");
    return sum % M;
}

void run()
{
    int i,j;
    for(j=1;j<=C;++j)
        D[1][j] = 1;

    for(i=2;i<=n;++i)
    {
        //c_sum=0;
        for(j=1;j<=C;++j)
            D[i][j] = query(i-1,j);
    }

    res = 0;
    for(j=1;j<=C;++j)
        res = (res+D[n][j]) % M;

}

int main()
{
	freopen("nrcuv.in","r",stdin);
	freopen("nrcuv.out","w",stdout);

	read();

	run();

    //for(int j=1;j<=C;++j) printf("%ld ", D[2][j]);

	printf("%ld",res);

	//for(size_t i=0;i<a[1].size();++i)
    //    printf("\n%d",a[1][i]);

	return 0;
}