A - Wikipedia

Time Limit: 2 sec / Memory Limit: 64 MB

問題文

PA 君はある日,Wikipediaアッカーマン関数という関数に出会った. Wikipedia によると,アッカーマン関数 A(m, n) は次のように再帰的に定義される関数である.

  • A(0, n) = n+1 (n ≥ 0)
  • A(m, 0) = A(m-1, 1) (m ≥ 1)
  • A(m, n) = A(m-1, A(m, n-1)) (m, n ≥ 1)

アッカーマン関数は与える数が大きくなると関数の値が爆発的に大きくなることで有名である.PA 君はアッカーマン関数の値を試しに手で計算しようとしたが,あまりに大変ですぐに諦めてしまった. あなたのタスクは,PA 君の代わりにアッカーマン関数の値を計算することである.

入力形式

入力は以下の形式で与えられる.

m n 

m, n はそれぞれアッカーマン関数の 第一引数, 第二引数 である.

出力形式

A(m, n) の値を 1 行で出力せよ.

制約

  • 0 ≤ m ≤ 3
  • 0 ≤ n ≤ 60
  • 入力値はすべて整数である.

入出力例

入力例 1

2 3

出力例 1

9

入力例 2

3 45

出力例 2

281474976710653
Writer: 花田裕一朗,小浜翔太郎
Tester: 楠本充

Source Name

KUPC 2012 Practice
B - String Sorting

Time Limit: 2 sec / Memory Limit: 64 MB

問題文

K 桁の数が書かれたカードが N 枚ある.

N 枚のカードを1列に並べることにより, K×N 桁の数を構成することが出来る.

どのようにカードを並べると, 最も値の大きな数を構成することが出来るだろうか.

入力形式

入力は以下の形式で与えられる.

N\ K\
a1\ ...\ aN\

N はカードの数であり,K はカードに書かれた数の桁数である.

aii 番目のカードに書かれた数を表す.

出力形式

カードを1列に並べた時に構成することが出来る数の最大値を1行に出力せよ.

制約

  • 1 ≤ N ≤ 100, 1 ≤ K ≤ 30
  • ai はちょうど K 桁の正の整数であり、最上位の桁は0ではない.

入出力例

入力例 1

2 4
1234 4321

出力例 1

43211234

2 枚のカードの並べ方を変えることにより, 1234432143211234 のいずれかを構成することが出来る. よって構成することのできる最大の数は 43211234 である.

入力例 2

3 3
111 333 222

出力例 2

333222111

3 枚のカードの並べ方は 6 通り考えられる.


Writer: 田村和範
Tester: 楠本充

Source Name

KUPC 2012 Practice
C - パニクるな

Time Limit: 2 sec / Memory Limit: 64 MB

この問題は正しく採点されていないという報告を受けています。

問題文

アーサーとフォードは無事に地表に降り立つことができた.しかし,この惑星は未開の惑星で,空を飛ぶための特訓や英会話の練習くらいしかやることが無かった.暇になったアーサーは,ちょうど手元に持っていた宇宙共通海抜高度計と初速度 v 角度45度で入れたものを発射できる大砲を使って,現在地の高さ h と初速度 v とこの惑星の重力 g を調べることにした.
具体的には t 秒後に海抜高度計が高さを記録するようにして,その海抜高度計をタオルに包んで丸めて入れて大砲に入れる.そして,すぐさまこのタオルを発射し,t 秒後のタオルの高さ y を記録する.これを何度か繰り返して間接的にh, v, gを調べるのだ.

さて準備はととのった.あとは t をどのようにセットするかを考えるだけだ.

入出力形式

入力は全て小数12桁までの実数で与えられる.

アーサーはタオルを大砲に入れ発射し t 秒後にタオルの海水面からの高さを調べるか,もしくは,現在地の高さ h と大砲からタオルが発射される時の初速度 v とこの惑星の重力 g を確定させることができる.

タオルを大砲に入れ発射し t 秒後に海抜高度計を使って観測を行うには

printf("? %.12f\n", t); fflush(stdout);
とする.次に,
scanf("%lf", &y);
とすると発射されてから t 秒後のタオルの海水面からの高さが得られる.
もしも t \lt 0 または 1000 \lt t となるような時間をセットすると実際の高さにかかわらず y には -1 が入る.

現在地の高さ h と大砲からタオルが発射される時の初速度 v とこの惑星の重力 g を確定させるには

printf("! %.12f %.12f %.12f\n", h, v, g); fflush(stdout);
とする.
このとき,h, v, g がそれぞれの実際の値との絶対誤差がで 10^{-5} 以下になっていなければならない.
なお,上記以外の出力を行った場合は誤答(Wrong Answer)と判定される.

制約

  • 0h10^4
  • 0.1v1,000
  • 0.1g < 100
  • 入力値は全て小数12桁までの実数である.
  • タオルを大砲に入れ発射することを最大 10 回まで行える.それを越えると大砲が壊れて使えなくなり,誤答(Query Limit Exceeded)となる.
  • yy = -gt^2/2 + vt / \sqrt{2}+ h という等式を満たす.

入出力例

プログラムの出力プログラムへの入力
? 1.41
10.192110797
? 2.71
2.31467840781
? 3.14
-3.93851731148
! 0.000000 20.000000 9.806650

プログラムはまず初めにタオルが発射されてから 1.41 秒後にタオルの高さを調べるように海抜高度計をセットしている.
その結果,発射されてから 1.41 秒後にはタオルの海面からの高さは 10.19 という事が分かる.
その後何度か調査を行い,最終的に現在地の高さ h は 0,タオルの初速度 v は 20,この惑星の重力加速度 g は 9.80665 と結論づけている


Writer : 花田裕一朗
Tester : 楠本充,森槙悟

Source Name

KUPC 2012 Practice
D - A mul B Problem

Time Limit: 5 sec / Memory Limit: 128 MB

問題文

Kはある大学で線形代数の講師をしている。 基礎学力を重視するKは生徒に行列の掛け算の問題のレポートを出した。 しかし、Kは授業の予習、サークルの顧問、中間試験の作成などで、レポートの採点をする時間がない。 TAであるあなたはKからレポートの採点を頼まれた。あなたの仕事は N \times N 行列 A,B,C が与えられた時に、A \times B = C であるかどうかをチェックすることである。

入力形式

入力は以下の形式で与えられる。

N
A_{11} A_{12} ... A_{1N}
A_{21} A_{22} ... A_{2N}
...
A_{N1} A_{N2} ... A_{NN}
B_{11} B_{12} ... B_{1N}
B_{21} B_{22} ... B_{2N}
...
B_{N1} B_{N2} ... B_{NN}
C_{11} C_{12} ... C_{1N}
C_{21} C_{22} ... C_{2N}
...
C_{N1} C_{N2} ... C_{NN}

出力形式

A \times B = Cを 満たすならYES、満たさないならNOを一行に出力せよ。

制約

  • 1 \leq N \leq 1000
  • -1,000 \leq a_{ij}, b_{ij} \leq 1,000
  • -10^9 \leq c_{ij} \leq 10^9
  • 入力値はすべて整数である.

この問題の判定には,99 点分のテストケースのグループが設定されている.このグループに含まれるテストケースは上記の制約に加えて下記の制約も満たす.

  • N = 1

入出力例

入力例1

1
1
2
2

出力例1

YES

入力例2

3
1 0 0
0 1 0
0 0 1
0 0 1
0 1 0
1 0 0
-1 -1 -1
-1 -1 -1
-1 -1 -1

出力例2

NO

入力例3

3
1 2 3
4 5 6
7 8 9
11 12 13
14 15 16
17 18 19
90 96 102
216 231 246
342 366 390

出力例3

YES

ヒント

似たような問題
プログラミングコンテストでの乱択アルゴリズム


Writer : 森槙悟
Tester : 楠本充

Source Name

KUPC 2012 Practice