Cod sursa(job #1192201)

Utilizator dd1997Dan Vasile dd1997 Data 28 mai 2014 20:50:13
Problema Sandokan Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f ("sandokan.in");
ofstream g ("sandokan.out");

unsigned long long n, r, k, t, j, r1, r2, r3;

unsigned long long prod(unsigned long long a, unsigned long long b)
{
    unsigned long long i=1;
    for(int j=a+1; j<=b; j++)
        i=(i*j)%2000003;
    return i;
}
int cmmdc(int a, int b)
{
    if (a%b==0)
      return b;
    else
      return cmmdc(b,a%b);
}

int a[5100],i,limj,lims;
int main()
{
    f >> n >> k;
    r=(n-1)%(k-1);
    if(r+r>n-1)
    {
        r1 = prod(r,n-1);
        r2 = prod(1,n-r-1);
    }
    else
    {
        r1 = prod(n-r-1,n-1);
        r2 = prod(1,r);
    }
    while (r1%r2>0)
       r1+=2000003;
   // cout << r1/r2;
    /*







    for (i=1;i<=n-1;i++)
       a[i] = i;
    if(r+r>n-1)
    {
        for (int i=1;i<=r;i++)
            a[i]=1;
        limj = n-r-1;
        lims = r+1;
    }
    else
    {
        for (int i=1;i<=n-1-r;i++)
            a[i]=1;
        limj = r;
        lims = n-r;
    }

    for (j=limj;j>=2;j--)
    {
        int tt = j;
        for (int k=n-1;k>=lims;k--)
        {
            int c = cmmdc(tt,a[k]);
            tt /=c;
            a[k]/=c;
            if (tt==1)
              break;
        }
    }

    t = 1;
    for (i=lims;i<=n-1;i++)
      t = (t*a[i])%2000003;
*/
    g << r1/r2;
    return 0;
}