Cod sursa(job #3275229)

Utilizator robert111Peter Robert robert111 Data 9 februarie 2025 15:10:58
Problema Sarpe Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <fstream>
#include <algorithm>

using namespace std;
ifstream cin("sarpe.in");
ofstream cout("sarpe.out");
int v[2005],vc[2005],ccnt=0,v4[2005],cnt4=0,v1[2005],v2[2005],r[2005],cnt=0,cntr=0,cnt1=0;
void produs1(int a,int vr[])
{
    int t=0;
    for(int i=0;i<cnt;i++)
    {
        t=t+vr[i]*a;
        vr[i]=t%10;
        t/=10;
    }
    while(t)
    {
        vr[cnt++]=t%10;
        t/=10;
    }
}
scadere()
{
    v[0]--;
    for(int i=0;i<cnt;i++)
    {
        if(v[i]<0)
        {
            v[i]+=10;
            v[i+1]--;
        }
        else
            break;
    }
    if(v[cnt-1]==0)
        cnt--;
}
cop(int vr[],int vi[])
{
    for(int i=0;i<cnt;i++)
        vr[i]=vi[i];
}
void inm()//v1*v2 ->r
{
      for(int i=0;i<cnt1;i++)
    for(int j=0;j<cnt;j++)
      r[i+j]+=v1[i]*v2[j];
      int t=0;
    for(int i=0;i<cnt+cnt1-1;i++)
    {
        t=t+r[i];
        r[i]=t%10;
        t/=10;
    }
    cntr=cnt+cnt1-1;
    if(t)r[cntr++]=t;
}
void adun()
{
    int t=0;
    for(int i=0;i<cntr;i++)
    {
        t=t+r[i]+v4[i];
        r[i]=t%10;
        t/=10;
    }
    while(t)
    {
        r[cntr++]=t%10;
        t/=10;
    }
}
int main()
{
    char c;
    while(cin>>c)
        v[cnt++]=c-'0';
reverse(v,v+cnt);
if(cnt==1 && v[0]==1)
{
    cout<<1;
    return 0;
}
else if(cnt==1 && v[0]==2)
{
    cout<<8;
    return 0;
}

cop(vc,v);
ccnt=cnt;
produs1(4,v);
cop(v4,v);
cnt4=cnt;
cnt=ccnt;
cop(v,vc);
scadere();
cop(v1,v);
cnt1=cnt;
scadere();
cop(v2,v);///cnt
inm();///r=(n-1)*(n-2)
cnt=cntr;
produs1(2,r);
cntr=cnt;
adun();
for(int i=cntr-1;i>=0;i--)cout<<r[i];
    return 0;
}
/**
v1-cnt1
v2-cnt
adunam r cu v4;
*/