Pagini recente » Cod sursa (job #372931) | Cod sursa (job #1055146) | Cod sursa (job #2510420) | Cod sursa (job #1972270) | Cod sursa (job #442176)
Cod sursa(job #442176)
#include <iostream>
#include <math.h>
using namespace std;
int N, M, H, W;
long long sol, p, Nr[401][401];
int main() {
FILE *f1=fopen("dreptunghiuri.in", "r"), *f2=fopen("dreptunghiuri.out", "w");
int i, j, q, A, D;
fscanf(f1, "%d %d", &M, &N);
for(i=1; i<N; i++) {
for(j=1; j<M; j++) {
//aflu numarul de dreptunghiuri inscrise
//intr-un dreptunghi mare de laturi H = i, W = j
H = i; W = j; p = 1;
if(Nr[W][H]) { sol+=(Nr[W][H]*(N-H)*(M-W)); }
else {
for(A=1; A<H; A++) {
D=W*W - 4*A*(H - A);
if(D>=0) { q=(int)sqrt(D); }
if(D>=0 && q*q==D) {
if((W - q)%2==0 && ((W - q)>>1)>0 && ((W - q)>>1)<W) {
p++;
}
if((W + q)%2==0 && ((W + q)>>1)>0 && ((W + q)>>1)<W) {
p++;
}
if((W - q)%2==0 && (W + q)%2==0 && ((W - q)>>1)>0 && ((W + q)>>1)>0 && ((W - q)>>1)<W && ((W + q)>>1)<W && ((W - q)>>1)==((W + q)>>1)) {
p--;
}
}
}
Nr[H][W]=p;
p *= ((N-H)*(M-W));
sol+=p;
}
}
}
fprintf(f2, "%lld\n", sol);
fclose(f1); fclose(f2);
return 0;
}