Cod sursa(job #2400915)
Utilizator | Data | 9 aprilie 2019 11:34:58 | |
---|---|---|---|
Problema | Nunta | Scor | 10 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 2.68 kb |
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("nunta.in");
ofstream cout("nunta.out");
short int v[1000000],s[1000000],imp[1000000];
int main()
{
int a,b=0,n,cnt=0;
cin>>n;
if(n|1)
b=1;
a=n/2;
while(b<=n)
{
v[1]=1;
int k=1;
for(int i=a+b;i>max(a,b);i--)
{
v[1]*=i;
int l=1;
while(v[l]>9)
{
l++;
v[l]+=v[l-1]/10;
v[l-1]%=10;
}
if(l>k)
k=l;
}
reverse(v+1,v+k+1);
int l;
for(int i=2;i<=min(a,b);i++)
{
int nr=0;
l=0;
if(i%2==1)
{
for(int j=1;j<=k;j++)
{
nr=nr*10+v[j];
if(nr>i)
{
l++;
v[l]=nr/i;
nr=nr%i;
if(v[l]>9)
{
l++;
v[l]=v[l-1]/10;
v[l-1]%=10;
}
}
}
}
else
{
for(int j=1;j<=k;j++)
{
nr=nr*10+v[j];
if(nr>i)
{
l++;
imp[l]=nr/i;
nr=nr%i;
if(imp[l]>9)
{
l++;
imp[l]=imp[l-1]/10;
imp[l-1]%=10;
}
}
}
}
k=l;
}
if(min(a,b)%2==0 && a!=0 && b!=0)
{
reverse(imp+1,imp+1+k);
for(int i=1;i<=k;i++)
{
s[i]+=imp[i];
if(s[i]>9)
{
s[i+1]+=s[i]/10;
s[i]%=10;
}
}
if(cnt<k)
cnt=k;
}
if(min(a,b)%2==1 or a==0 or b==0)
{
reverse(v+1,v+1+k);
for(int i=1;i<=k;i++)
{
s[i]+=v[i];
if(s[i]>9)
{
s[i+1]+=s[i]/10;
s[i]%=10;
}
}
if(cnt<k)
cnt=k;
}
a--;
b+=2;
}
for(int i=cnt;i>=1;i--)
cout<<s[i];
return 0;
}