Cod sursa(job #2039702)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 14 octombrie 2017 20:07:36
Problema Rubarba Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<bits/stdc++.h>
#define MOD 100003
#define maxN 2005
using namespace std;
int n;
int p;
long long dp[maxN][maxN];
inline void RunFirstTask()
{
    scanf("%d",&n);
    for(int i=1;i<n;i++) printf("%d ",i);
    printf("%d\n",n-1);
//    return 0;
}

inline void RunSecondTask()
{
    scanf("%d",&n);
    /**
        dp[i][j]-numarul de solutii de a scrie 1 ca i fractii cu maxim 2*j de numitor maxim
    **/
    dp[2][1]=1;
    for(int i=3;i<=n;i++)
    {
        for(int j=1;j<=(i/2);j++)
        {
            dp[i][j]=(dp[i][j-1]+dp[i-j][(i-j)/2]-dp[i-j][(j+1)/2-1])%MOD;
            while(dp[i][j]<0) dp[i][j]+=MOD;
        }
    }

    printf("%d\n",dp[n][n/2]);
}

int main()
{
    freopen("fractii2.in","r",stdin);
    freopen("fractii2.out","w",stdout);
    scanf("%d",&p);
    if(p==1) RunFirstTask();
        else RunSecondTask();
    return 0;
}