1 4 9 16 25
で正方形が増えていくけど、K=15とか14では一段目さえもまともに組み立てられない。
とりあえず、それに注意する。後は裏面の面積もたすこととか。こんがらなければ簡単に解ける問題。
じぶんはこんがらがってたww
class PyramidOfCubes {
public:
double surface(int K) {
LL tmp = 0;
int i;
for(i = 1; ; i++) {
tmp += i*i;
if(tmp >= K) break;
}
double ans = 0; ans += i*i*1.0*2;
if(i*i > K) ans -= (i*i - K)*2; //K=15とか、K=14とかに対処。
for(int j = i; j >= 1; j--) {
if(K - j*j >= 0) {
K -= j*j;
ans += j*4*1.0;
} else {
int row = (K-1)/j + 1;
int col = (K < j) ? K%j : j;
ans += (row+col)*2.0; break;
}
}
return ans;
}