Cod sursa(job #710330)

Utilizator suzanicaSuzanica Mihu suzanica Data 9 martie 2012 14:21:13
Problema Lista lui Andrei Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
//Manghiuc Bogdan
#include<fstream>
using namespace std;
ifstream f("nrcuv.in");
ofstream g("nrcuv.out");
int k;
int N,M,a[27][27],v[1000],v1[1000],v2[1000],u[1000];
int putere(int N)
{
	k=2;
	int i,j,t;
	for(i=1;i<=N-1;i++)
	{
		v2[1000]=0;
		t=0;
		for(j=1;j<=k+1;j++)
		{
			v1[1000-j+1]=(6*v[1000-j+1]+t)%10;
			t=(6*v[1000-j+1]+t)/10;
		}
		t=0;
		for(j=1;j<=k+1;j++)
		{
			v2[1000-j]=(2*v[1000-j+1]+t)%10;
			t=(2*v[1000-j+1]+t)/10;
		}
		t=0;
		for(j=1;j<=k+2;j++)
		{
			v[1000-j+1]=(v1[1000-j+1]+v2[1000-j+1]+t)%10;
			t=(v1[1000-j+1]+v2[1000-j+1]+t)/10;
		}
		k+=2;
	}
	return k;
}
int main()
{
	long long p=0;
	f>>N>>M;
	if(N==1)
	{
		g<<26-M;
		
	}
	else
	{
	int i,j;
	char l1,l2;
	for(i=1;i<=M;i++)
	{
		f>>l1;f>>l2;
		if(a[l1-'a'+1][l2-'a'+1]==0)
		{
			a[l1-'a'+1][l2-'a'+1]=1;
			a[l1-'a'+1][0]++;
		}
		if(a[l2-'a'+1][l1-'a'+1]==0)
		{
			a[l2-'a'+1][l1-'a'+1]=1;
			a[l2-'a'+1][0]++;
		}
	}
	v[1000]=6;
	v[999]=2;
	for(i=1;i<=26;i++)
		p=p+(N-1)*a[i][0];
	k=putere(N);
	i=1000;
	while(p)
	{
		u[i]=p%10;
		p/=10;
		i--;
	}
	for(j=1000;j>i;j--)
		if(v[j]<u[j])
		{
			v[j-1]--;
			v[j]=v[j]-u[j]+10;
		}
	while(v[1000-k+1]==0)
		k--;
	for(i=k;i>0;i--)
		g<<v[1000-i+1];
	}
	f.close();
	g.close();
	return 0;
}