Cod sursa(job #1883993)

Utilizator ericutzdevilEric Spataru ericutzdevil Data 18 februarie 2017 13:05:38
Problema Lista lui Andrei Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;

struct ura{
    int x1,x2;
};

ura vreg[1001];

char c,c1,c2,sreg[4002];
int dp[1001][30],nrreg[1001];

bool sortare (ura a, ura b){
    if (a.x1==b.x1){
        return a.x2<b.x2;}
    return a.x1<b.x1;
}

int main()

{

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

int aux,aux2;
int n,m,i,j,k,cc2;

scanf ("%d%d%c",&n,&m,&c);

for (i=1;i<=m;i++){
    scanf ("%c %c\n",&c1,&c2);
    vreg[i].x1=c1-'a'+1;
    vreg[i].x2=c2-'a'+1;
    if (vreg[i].x1>vreg[i].x2){
        aux=vreg[i].x2;
        aux2=vreg[i].x1;
        vreg[i].x1=aux;
        vreg[i].x2=aux2;
    }
    if (vreg[i].x1==vreg[i].x2)
        nrreg[vreg[i].x1]--;
    nrreg[vreg[i].x1]++;
    nrreg[vreg[i].x2]++;}

sort (vreg+1,vreg+m+1,sortare);

for (i=2;i<=m;i++){
    if (vreg[i].x1==vreg[i-1].x1 && vreg[i].x2==vreg[i-1].x2){
        nrreg[vreg[i].x2]--;
        nrreg[vreg[i].x1]--;
    }
}

for (i=1;i<=26;i++){
    dp[1][i]=1;}

int sfinal=0;

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]-=nrreg[j];
        }
}

for (i=1;i<=26;i++)
{
    sfinal+=dp[n][i];
}

printf ("%d",sfinal);

return 0;
}