Cod sursa(job #1883985)

Utilizator MarcSpataruMarc Spataru MarcSpataru Data 18 februarie 2017 13:01:21
Problema Lista lui Andrei Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int dp[1001][30],lit[27];
struct nrcuv
{
    int lit1,lit2;
};
nrcuv litera[1001];
bool sortare(nrcuv a,nrcuv b)
{
    if(a.lit1==b.lit1)
        return a.lit2<b.lit2;
    return a.lit1<b.lit1;
}
int main()
{
    freopen("nrcuv.in","r",stdin);
    freopen("nrcuv.out","w",stdout);
    int n,m,i,lit1,lit2,j,k,aux;
    char l1,l2;
    scanf("%d%d%c",&n,&m,&l1);
    for(i=1;i<=m;i++)
    {
        scanf("%c %c\n",&l1,&l2);
        if(l2<l1)
        {
            aux=l2;
            l2=l1;
            l1=aux;
        }
        litera[i].lit1=l1-'a'+1;
        litera[i].lit2=l2-'a'+1;
        if(l1==l2)
            lit[litera[i].lit1]--;
        lit[litera[i].lit1]++;
        lit[litera[i].lit2]++;
    }
    sort(litera+1,litera+m+1,sortare);
    for(i=1;i<m;i++)
    {
        if(litera[i].lit1==litera[i+1].lit1&&litera[i].lit2==litera[i+1].lit2)
        {
            lit[litera[i].lit1]--;
            lit[litera[i].lit2]--;
        }
    }
    for(i=1;i<=26;i++)
    {
        dp[1][i]=1;
    }
    for(i=2;i<=n;i++)
    {
        for(j=1;j<=26;j++)
        {
            for(k=1;k<=26;k++)
            {
                dp[i][j]+=dp[i-1][k];
            }
            dp[i][j]-=lit[j];
        }
    }
    int s=0;
    for(j=1;j<=26;j++)
    {
        s+=dp[n][j];
    }
    printf("%d",s);
    return 0;
}