結果
問題 | No.47 ポケットを叩くとビスケットが2倍 |
ユーザー | Takuya Ito |
提出日時 | 2022-12-17 18:14:40 |
言語 | TypeScript (5.4.3) |
結果 |
CE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 2,487 bytes |
コンパイル時間 | 6,140 ms |
コンパイル使用メモリ | 144,788 KB |
最終ジャッジ日時 | 2024-11-17 03:24:28 |
合計ジャッジ時間 | 6,851 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
main.ts(43,6): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.
ソースコード
function Main(input: string): void { // 最終的に実現するビスケットの数 const target = parseInt(input); // 最終的に実現するビスケットの数に対して、法則性を確認する // <1>targetが 2の2乗 より大きく 2の3乗 以下の場合は、3回叩くことで実現できるのか // <2>targetが 2の3乗 より大きく 2の4乗 以下の場合は、4回叩くことで実現できるのか // この<1><2>が成立するのであれば、それ以外のtargetの取る値の範囲においても同様だと言えるはず。 // <1> 2^2(4) < target <= 2^3(8) なら、3回で全て実現できるのか : 実現できる // - 5枚にする場合 : 1*2 -> (2-2)+ 2*2 -> (4-1)+1*2 = 5 // - 6枚にする場合 : 1*2 -> (2-2)+ 2*2 -> (4-2)+2*2 = 6 // - 7枚にする場合 : 1*2 -> (2-2)+ 2*2 -> (4-3)+3*2 = 7 // - 8枚にする場合 : 1*2 -> (2-2)+ 2*2 -> (4-4)+4*2 = 8 // <上の数式について説明> // 例えば5枚にしたい場合、下記のような手順を踏むことになる。上の数式(っぽいもの)ではこれを表現している。 // - 最初の1枚を叩いて2倍に : 計1枚 * 2倍 = 計2枚 // - 計2枚すべてを叩いて2倍に : 計2枚 * 2倍 = 計4枚 // - 計4枚のうち、1枚だけを叩いて2倍に : (計4枚 - 1枚抜く) + 抜いた1枚 * 2倍 = 計5枚 // <2> 2^3(8) < target <= 16(2^4)なら、4回で全て実現できるのか : 実現できる // - 9枚にする場合 : 1*2 -> (2-2)+ 2*2 -> (4-4)+4*2 -> (8-1)+1*2= 9 // - 10枚にする場合 : 1*2 -> (2-2)+ 2*2 -> (4-4)+4*2 -> (8-2)+2*2= 10 // - 11枚にする場合 : 1*2 -> (2-2)+ 2*2 -> (4-4)+4*2 -> (8-3)+3*2= 11 // - 12枚にする場合 : 1*2 -> (2-2)+ 2*2 -> (4-4)+4*2 -> (8-4)+4*2= 12 // - 13枚にする場合 : 1*2 -> (2-2)+ 2*2 -> (4-4)+4*2 -> (8-5)+5*2= 13 // - 14枚にする場合 : 1*2 -> (2-2)+ 2*2 -> (4-4)+4*2 -> (8-6)+6*2= 14 // - 15枚にする場合 : 1*2 -> (2-2)+ 2*2 -> (4-4)+4*2 -> (8-7)+7*2= 15 // - 16枚にする場合 : 1*2 -> (2-2)+ 2*2 -> (4-4)+4*2 -> (8-8)+8*2= 16 // つまり求めるものは、targetが2の何乗以下なのか // 問題の要件よりtargetは 10**8 以下なので、2のべき乗で言うと 2**27 以下まで精査すれば良い for (let count = 0; count <= 27; count++) { if (target <= 2 ** count) { console.log(count); break; } } } Main(require("fs").readFileSync("/dev/stdin", "utf8"));