Cod sursa(job #1865608)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 1 februarie 2017 21:04:46
Problema Dreptunghiuri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
using namespace std;

fstream in ( "dreptunghiuri.in" , ios::in  );
fstream out( "dreptunghiuri.out", ios::out );

const int NMAX = 4e3 + 5;

int sqr[NMAX * NMAX];

int main( void ) {
    ios::sync_with_stdio( false );
    
    int n, m;
    in >> n >> m;
    
    fill( sqr, sqr + m * m, -1 );
    for( int i = 0; i < m; i ++ )
        sqr[i * i] = i;
    
    long long ans = 0;
    for( int i = 1; i < n; i ++ ) {
        for( int j = 1; j < m; j ++ ) {
            int aux = 1;
            
            for( int k = 1; k < i; k ++ ) {
                int dlt = j * j - 4 * k * ( i - k );
                
                if( dlt < 0 || sqr[dlt] < 0 )
                    continue;
                
                int sl1 = ( j + sqr[dlt] ) / 2;
                int sl2 = ( j - sqr[dlt] ) / 2;
                
                if( ( j + sqr[dlt] ) % 2 == 0 && 1 <= sl1 && sl1 < j )
                    aux ++;
                if( ( j + sqr[dlt] ) % 2 == 0 && 1 <= sl2 && sl2 < j && dlt != 0 )
                    aux ++;
            }
            
            ans += aux * 1LL * ( n - i ) * ( m - j );
        }
    }
    
    out << ans;
    return 0;
}