カメヲラボ

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

Set Definition

http://acm.pku.edu.cn/JudgeOnline/problem?id=2591

(1)1は集合Sに属します
(2)xがSに属するならば、2x+1,3x+1もSに属します
(3)上記以外のいかなる数もSに属しません

(1)〜(3)の条件を満たす値の集合について、小さいものからN番目(1〜10000000)の値を求めてください。

  • 999出た!

長いことPKUで遊んでいて、初めて999msが出ました。結構嬉しいです。

  • コード

999msが嬉しかっただけなので、特に工夫はしていません。

s[1<<24];
x,y,i;
main(a,b)
{
  for(*s=1;i++<1e7;y+=a>=b,x+=b>=a)
    s[i]=fmin(a=2*s[x],b=3*s[y])+1;
  for(;~scanf("%d",&a);printf("%d\n",s[a-1]));
}