SuperCon2002予選課題

 

問題

次のような漸化式 f(n, m)を考えます。
   f(0, m) = m
   f(1, m) = m + 1
   f(n, m) = floor(f(n-1, m+1) + f(n-2, m+2)/2)
     ここで floorは切捨て関数。

たとえば

   f(1, 4) = 5
   f(2, 4) = floor(f(1, 5) + f(0, 6)/2) = 9
となります。

次のn, mの組合せに対し、関数fの値を計算してください。ただし、あらかじ め答えをプログラム中に埋め込むことは禁止とします。

(1) n=35, m=35
(2) n=70, m=70
(3) n=100, m=100

入力

n m

出力

関数fの値

解答プログラムについて

各問題に関し異なるプログラムを作成、あるいは同一のプログラムで すべての問題に対処、どちらの選択も可です。

プログラミング言語

ANSI Cのみを仮定します。

順位について

(1)が正解していることを前提に(2)を採点します。同様に(2)ができている ことを前提に(3)を採点します。1問正解、2問正解、3問正解の順に順位が あがります。正解同数の場合は、それまでに計算に要した時間がより短い 方を上位とします。

精度に関する注意

整数int、長い整数long int共に32ビットと仮定します。

計算時間に関する注意

本センターが所有する計算機において、実行時間が5分を越えるものに関しては 途中で処理を打ち切ることがあります。

参考

#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[]){

  /** 入力 **/
  int n = atoi(argv[1]);
  int m = atoi(argv[2]);

  /** fを計算 **/

  /** 出力 **/
						    
  printf("%d\n", ans); 
 もしくは
  printf("%s\n", ans);  -- 答えが精度範囲を越えた場合