Cod sursa(job #1045006)

Utilizator Iulian94Kantor Iulian-Vlad Iulian94 Data 30 noiembrie 2013 19:00:13
Problema Dreptunghiuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <fstream>

using namespace std;


int main()
{
    int n,m,my[200000],z,Sk,Mi,Pl;
    unsigned long long S=0;
    ifstream f("dreptunghiuri.in");
    f>>n>>m;
    f.close();
    n--;m--;
    for(int i=1; i<=n || i<=m; ++i)
        my[i*i]=i;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=m;++j)
        {
            Sk=0;
            for(int k=0;k<i;++k)
            {
                int  a=-j , b=k*(i-k);
                z=a*a-4*b;
                if(z<0 ||(z && !my[z]))
                    continue;
                z=my[z];
                if (((-a+z)%2!=0))
                    continue;
                Mi=(z+1)/2*(-1);
                Pl=(z-1)/2;
                if(0<=Mi && Mi<j)
                    Sk++;
                if(0<=Mi && Pl<j && Mi!=Pl)
                    Sk++;
            }
         S+=(n-i+1)*(m-j+1)*Sk;
        }
    n++;m++;
    S+=n*m*(n-1)*(m-1)/4;
    ofstream g("dreptunghiuri.out");
    g<<S;
    g.close();
    return 0;
}