Pagini recente » Cod sursa (job #2567574) | Cod sursa (job #1799661)
#include <bits/stdc++.h>
using namespace std;
ifstream f("alice.in");
ofstream g("alice.out");
int N[1<<14],Np[1<<20];
char aux[1<<10];
void Inm(int x)
{
for(int i=1;i<=Np[0];++i) Np[i]*=x;
for(int i=1;i<=Np[0];++i)
if(Np[i]>=10)
{
Np[i+1]+=Np[i]/10;
Np[i]%=10;
Np[0]=max(Np[0],i+1);
}
}
void Sq()
{
for(int i=1;i<=N[0];++i)
for(int j=1;j<=N[0];++j)
{
Np[i+j-1]+=N[i]*N[j];
if(Np[i+j-1]>=10)
{
Np[i+j]+=Np[i+j-1]/10;
Np[i+j-1]%=10;
}
}
Np[0]=2*N[0]-(!Np[2*N[0]]);
}
void Dif()
{
int T=0;
for(int i=1;i<=Np[0];++i)
{
Np[i]-=N[i]+T;
if(Np[i]<0) Np[i]+=10,T=1;
else T=0;
}
while(Np[0]>1&&!Np[Np[0]]) --Np[0];
}
void Add(int x)
{
Np[1]+=x;
for(int i=1;Np[i]>=10;++i)
{
Np[i+1]+=Np[i]/10;
Np[i]%=10;
Np[0]=max(Np[0],i+1);
}
}
int main()
{
f.getline(aux,1005);
for(int i=0;aux[i]!='\0';++i,++N[0]) N[i+1]=aux[i]-'0';
reverse(N+1,N+N[0]+1);
if(N[0]==1&&N[1]==1)
{
g<<2;
return 0;
}
Sq();
Dif();
Add(2);
Inm(2);
for(int i=Np[0];i;--i) g<<Np[i];
return 0;
}