Pagini recente » Cod sursa (job #1446194) | Cod sursa (job #1373041) | Cod sursa (job #1673929) | Cod sursa (job #362910) | Cod sursa (job #931318)
Cod sursa(job #931318)
#include <fstream>
#define MAX 400
using namespace std;
int nl, nc;
int sqr[MAX*MAX+1];
void S(){
int i;
for(i=1; i<=MAX; i++)
sqr[i*i]=i;
}
int solve(int h, int w, int a){
int F=0;
int d;
int c1, c2;
if(w*w-4*a*(h-a)==0)
d=0;
else if(w*w-4*a*(h-a)>0 && sqr[w*w-4*a*(h-a)])
d = sqr[w*w-4*a*(h-a)];
else d=-1;
if(d>=0) {
c1=(w+d)/2;
c2=(w-d)/2;
if(c1==c2)
if(w%2==0 && c1<w && c1>=0)
F=1;
else F=0;
else {
if((w+d)%2==0 && 0<=c1 && c1<w)
F++;
if((w-d)%2==0 && 0<=c2 && c2<w)
F++;
}
}
else F=0;
return F;
}
int main(){
int i, j, a;
long long nr=0, SOL=0;
ifstream f("dreptunghiuri.in");
ofstream g("dreptunghiuri.out");
f>>nl>>nc;
S();
if(nl>nc){
i=nl; nl=nc; nc=i; }
for(i=1; i<nl; i++) {
for(j=i; j<nc; j++){
for(nr=0, a=0; a<i; a++)
nr += solve(i, j, a);
if(i!=j){
if(nl>i && nc>j) SOL += (nl-i)*(nc-j)*nr;
if(nl>j && nc>i) SOL += (nl-j)*(nc-i)*nr;
}
else SOL+=(nl-i)*(nc-j)*nr;
}
}
g<<SOL<<endl;
f.close();
g.close();
return 0;
}