44 lines
923 B
C
44 lines
923 B
C
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <math.h>
|
||
|
|
||
|
int dev(int a, int b, int p);
|
||
|
int calcb(int a, int p);
|
||
|
|
||
|
int main(int argc, char *argv[])
|
||
|
{
|
||
|
int p = 2000000;
|
||
|
int a, b;
|
||
|
int d1, d2; //dev of b, dev of b+1
|
||
|
int cd, td; //current dev, min dev
|
||
|
int tb, ta; //best a and b
|
||
|
|
||
|
ta = tb = td = -1;
|
||
|
for(a = 1; (b = calcb(a, p)) + 1 >= a; ++a){
|
||
|
d1 = dev(a, b, p);
|
||
|
d2 = dev(a, b + 1, p);
|
||
|
cd = d1 > d2 ? d2 : d1;
|
||
|
b += (d2 == cd);
|
||
|
if(cd < td || td == -1){
|
||
|
//smaller deviation
|
||
|
td = cd;
|
||
|
tb = b;
|
||
|
ta = a;
|
||
|
}
|
||
|
}
|
||
|
//printf("a = %d\nb = %d\ndev = %d\narea = %d\n", ta, tb, td, ta*tb);
|
||
|
printf("%d\n", ta*tb);
|
||
|
}
|
||
|
|
||
|
//calculate b
|
||
|
int calcb(int a, int p)
|
||
|
{
|
||
|
return (sqrt(1 + ((float) 16*p)/(a*a + a)) - 1)/2;
|
||
|
}
|
||
|
|
||
|
//eval deviation
|
||
|
int dev(int a, int b, int p)
|
||
|
{
|
||
|
return abs(a*b*(a + 1)*(b + 1)/4 - p);
|
||
|
}
|