Cod sursa(job #768473)

Utilizator bratualexBratu Alexandru bratualex Data 16 iulie 2012 22:28:09
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <fstream>
#include <cassert>
using namespace std;
ifstream fin ("diamant.in");
ofstream fout ("diamant.out");
int a[3][10000000];
int main()
{
    int n,m,i,j,k,nr=0,t,u;
    int calitate;
    fin>>n>>m>>calitate;
    a[0][0]=1;
    t=1;
    u=1;
    for ( i=1;i<=m*n;i++,u++ )
    {
        if(u==m+1)
        {
            u=1;
            t++;
        }
        k=1;
        for (j=1;j<=a[!(i%2)][0];j++)
        {

            if (a[!(i%2)][j]-u*t==calitate)
            {
                nr++;

                a[i%2][k++]=a[!(i%2)][j];
                a[i%2][k++]=a[!(i%2)][j]+u*t;
            }
            else
            {
                if (a[!(i%2)][j]+u*t==calitate)
                {
                    nr++;
                    a[i%2][k++]=a[!(i%2)][j]-u*t;
                    a[i%2][k++]=a[!(i%2)][j];
                }
                else
                {
                    a[i%2][k++]=a[!(i%2)][j]-u*t;
                    a[i%2][k++]=a[!(i%2)][j];
                    a[i%2][k++]=a[!(i%2)][j]+u*t;
                }
            }

/*
            if (a[i-1][j]!=calitate)
            {
                a[i][k++]=a[i-1][j]-u*t;
                a[i][k++]=a[i-1][j];
                a[i][k++]=a[i-1][j]+u*t;

            }
            else
            {
                a[i][k++]=a[i-1][j]-((i/n)+1)*(i%m);
                a[i][k++]=a[i-1][j]+((i/n)+1)*(i%m);
                nr++;
            }
*/

        }
        a[i%2][0]=k-1;
        assert (k<1000000-10);
    }
    fout<<nr;
    return 0;
}