カメヲラボ

主にプログラミングとお勉強全般について書いてます

Playground

http://acm.pku.edu.cn/JudgeOnline/problem?id=2640
半円形の針金をつなぎ合わせて、1つの閉じた図形が作れるかどうかという問題。ただし、つなぎ合わせる角度は何度でもかまわない。また、つなぎ合わせる針金はすべてを使う必要も無い。与えられるのは半円形の針金の半径。

解法がイマイチよくわからないのですが、つなぎ合わせの角度をどのようにしても良いなら、とりあえず①短い針金いくつかの長さ(半径)の合計と②それよりちょっと大きい針金の半径の大きさをくらべて、①の方が②よりちょっと長けりゃ大丈夫じゃないかなーといういい加減なコードを書くことで通りました。

これってあってるんやろか。まあ、それはそれとして、浮動小数のソートを行うコードの場合はG++のほうがGCCより短く書けるんじゃないかなーと思ったわけです。

#include<algo.h>
float v['~~'],s;
int k,i;
main()
{
  for(;cin>>k,i=k;puts(i<k?"YES":"NO"))
  {
    for(;s=i--;)cin>>v[i];
    for(sort(v,v+k);)
      s<v[++i]&&i<k;s+=v[i];
  }
}

ヘッダのインクルードと必ず型名を書かなければなりませんが、cinが使えるのは魅力ですし、ソート部分をかなり短く書けます。GCC浮動小数のコールバック関数を書くのはどうしても長くなると思うんですよねー。