PKU 3737 UmBasketella

http://poj.org/problem?id=3737
要約すると、表面積Sの円錐の体積が最大になるときの体積、高さ、底面の半径を出力しろというような問題。

ゴリゴリ計算してソースコードに直しました。こんな問題しか解けなくて、何だか残っている問題を開くたび開くたび解法が全く思いつかない状態で困ってます。
AOJからPKUに移ってきたように、PKUからどこかに移りたいです。

main(){
  double s;
  while(cin>>s){
    double r=sqrt(s/M_PI)/2;
    double v=M_PI*r*r/3*sqrt(s*s/M_PI/M_PI/r/r-2*s/M_PI);
    double h=sqrt(s*s/M_PI/M_PI/r/r-2*s/M_PI);
    printf("%.2f\n%.2f\n%.2f\n",v,h,r);
  }
}