Cod sursa(job #1341563)

Utilizator OctaDuiu Octavian Octa Data 12 februarie 2015 21:21:41
Problema 1-sir Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<cstdio>
#define MOD 194767
int n,s,smax,dif;
int max,sum[90001];
int cmax;
int main ()
{
    int i,j;
    freopen("1-sir.in","r",stdin);freopen("1-sir.out","w",stdout);

    scanf("%d%d",&n,&s);

    if(s<0) s*=-1;
    smax=n*(n-1)/2;

    if(s>smax)
    {
        printf("0\n");
        return 0;
    }

    if(s==smax)
    {
        printf("1\n");
        return 1;
    }

    dif=smax-s;

    if(dif%2)
    {
        printf("0\n");
        return 0;
    }

    dif/=2;
    sum[0]=1;
    max=0;

    for(i=1;i<=n-1;i++)
    {
        cmax=max;
        for(j=max;j>=0;j--)
        {
            if(j+i>dif)
                continue;
            if(!sum[j])
                continue;
            sum[j+i]+=sum[j];
            if(i+j>cmax)
                cmax=i+j;
            if(sum[j+i]>=MOD)
                sum[j+i]-=MOD;
        }
        max=cmax;
    }

    printf("%d\n",sum[dif]);

    return 0;
}