Cod sursa(job #25573)

Utilizator szakiold name szaki Data 4 martie 2007 12:59:18
Problema Kperm Scor 10
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasele 11-12 Marime 1.37 kb
/*#include "stdafx.h"
#include "infoarena.h"

#include <conio.h>/**/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define _KPERM_
#ifdef _KPERM_

#ifndef _INC_CONIO
void clrscr()
{
    freopen("kperm.out", "w", stdout);
}
void getch() {}
#else
void clrscr() {}
#endif

#define rep(i,n) for(i=0;i<n;i++)
#define min(a,b) (((a) < (b)) ? (a) : (b))

int a[5002];
int n, k;

int count;

void write()
{
    int i,j;

    int v = 1;
    for(i=0;i<=n-k;i++)
    {
        int sum = 0;
        for(j = i; j < i+k; j++)
            sum+=a[j];
        if (sum % k != 0) v = 0;
    }
    if (v)
    {
        //rep(i,n) printf("%d", a[i]);
        //printf("\n");
        count++;
        if (count == 666013) count = 0;
    }
}

void perm(int p)
{
    if (p == n-1)
    {
        write();
        return;
    }

    perm(p+1);
    int c = a[p];
    for (int i = p+1; i < n; i++)
    {
        a[p] = a[i];
        a[i] = c;
        perm(p+1);
        a[i] = a[p];
    }
    a[p] = c;
}

int main()
{
    int i;
    //n=10,k=9;

    clrscr();
    FILE *fin = fopen("kperm.in", "r");
    fscanf(fin, "%d %d", &n, &k);

    if(k%2==0)
    {
        printf("0");
        getch();
        return 0;
    }

    rep(i,n) a[i] = i+1;

    perm(0);

    printf("%d", count);


    getch();
    return 0;
}

#endif