Cod sursa(job #1878808)

Utilizator Athena99Anghel Anca Athena99 Data 14 februarie 2017 14:42:29
Problema Dreptunghiuri Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <fstream>

using namespace std;

ifstream fin("dreptunghiuri.in");
ofstream fout("dreptunghiuri.out");

const int nmax= 400;

int pp[nmax*nmax+1];

int main(  ) {
    for ( int i= 1; i<=nmax; ++i ) {
        pp[i*i]= i;
    }

    int n, m, sol= 0;
    fin>>n>>m;
    --n, --m;
    for ( int i= 1; i<=n; ++i ) {
        for ( int j= 1; j<=m; ++j ) {
            int ans= 1;
            for ( int k= 1; k<=j-1; ++k ) {
                int nr= i*i-4*k*(j-k);
                if ( nr>=0 && pp[nr]*pp[nr]==nr && (i-pp[nr])%2==0 ) {
                    ++ans;
                    if ( nr>0 ) {
                        ++ans;
                    }
                }
            }

            sol= sol+ans*(n-i+1)*(m-j+1);
        }
    }

    fout<<sol<<"\n";

    return 0;
}