出てたらMediumをしょうもないミスで落としてるところだった。
https://community.topcoder.com/stat?c=problem_statement&pm=15313
問題
各辺の長さが正整数の4次元超直方体のうち、表体積の総和がVとなる辺の組み合わせは何通りか。
解法
4辺の長さを短い順にa,b,c,dとすると、表体積は2(abc+abd+acd+bcd)=2*(abc+(ab+bc+ca)d)となる。
a,b,cを総当たりし、dとしてc以上の整数を取りうるかチェックしよう。
a,b,cの総当たりは適度に枝刈りしないとTLEする。
class Hyperbox { public: int count(int volume) { if(volume%2) return 0; ll V=volume/2; ll ret=0; for(ll a=1;4*a*a*a<=V;a++) { for(ll b=a;4*a*b*b<=V;b++) { for(ll c=b;a*c*c+b*c*c<=V;c++) { ll X=a*b*c; ll Y=(a*b+b*c+c*a); if((V-X)%Y) continue; ll d=(V-X)/Y; if(d>=c) ret++; } } } return ret; } }
まとめ
最初任意次元で答えるのかと思って頭を抱えてしまった。