Cod sursa(job #945163)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 30 aprilie 2013 18:04:46
Problema Sarpe Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<cstdio>
#include<cstring>

using namespace std;

const char iname[]="sarpe.in";
const char oname[]="sarpe.out";
const int maxn=2005;

int N[maxn],i,j,M[maxn],n;
char s[maxn];

int main()
{
    freopen(iname,"r",stdin);
    freopen(oname,"w",stdout);
    fgets(s,sizeof(s),stdin);
    for(n=0;s[n]>='0'&&s[n]<='9';++n);
    for(--n;n>=0;n-=3)
    {
        N[++N[0]]=s[n]-'0';
        if(n>0)
            N[N[0]]+=(s[n-1]-'0')*10;
        if(n>1)
            N[N[0]]+=(s[n-2]-'0')*100;
    }
    if(N[0]==1&&N[1]==1)
    {
        printf("2\n");
        return 0;
    }
    for(i=1;i<=N[0];++i)
        for(j=1;j<=N[0];++j)
            M[i+j-1]+=2*N[i]*N[j];
    for(i=1;i<=N[0];++i)
        M[i]-=2*N[i];
    M[1]+=4;
    for(M[0]=1;M[0]<2*N[0]||M[M[0]]>0;++M[0])
    {
        M[M[0]+1]+=M[M[0]]/1000;
        M[M[0]]%=1000;
        if(M[M[0]]<0)
            --M[M[0]+1],M[M[0]]+=1000;
    }
    while(M[M[0]]==0)
        --M[0];
    printf("%d",M[M[0]]);
    for(i=M[0]-1;i;--i)
        printf("%03d",M[i]);
    printf("\n");
}