Cod sursa(job #29644)

Utilizator sinclairPopescu Flavius sinclair Data 9 martie 2007 18:30:38
Problema Kperm Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream>
using namespace std;

int posibil(int pos,int x[11])
{
    int i;
    for(i=pos-1;i>=1;i--)
     if(x[pos]==x[i]) return 0;
    return 1;
}

int solutie(int n,int x[11],int k)
{
    int i,j,s;
    for(i=1;i<=n-k+1;i++)
    { s=0;
      for(j=i;j<=i+k-1;j++)
        s+=x[j];
      if(s%k!=0) return 0;
    }
    return 1;
}

int back(int n,int k,int x[11])
{
    int i,pos,ok,res=0;
    pos=1;
    x[pos]=0;
    while(pos>0)
    {
        ok=0;
        while(x[pos]<n && ok==0)
        {
            x[pos]++;
            ok=posibil(pos,x);
        }
        if(ok)
            if(pos==n) { if(solutie(n,x,k)) res++;  }
            else { pos++; x[pos]=0; }
        else pos--;
    }
    return res;
}


int main()
{
    int n,k,x[11];
    ifstream fin("kperm.in");
    fin>>n>>k;
    fin.close();
    ofstream fout("kperm.out");
    fout<<back(n,k,x);
    fout.close();
}