筑波大学プログラミングコンテスト2024
コンテスト日時
2024/11/17 (Su) 12:00 - 16:00

I - ABCalculator

Assam
2
s
1024
MB
650

問題文

a, b, c の $3$ 種類の文字からなる文字列 $S$ があります。
Alice は、$S$ に対して「操作 $1$ か操作 $2$ のうち好きな方を実行する」ことを、 どちらの操作も行えなくなるまで 続けます。

  • 操作 $1$: $S$ の連続する部分文字列 ba をひとつ選び、aab に置き換える。
  • 操作 $2$: $S$ の連続する部分文字列 ca をひとつ選び、aaac に置き換える。

ただし、「 どちらの操作も行えない状態 」とは、 $S$ の連続する部分文字列に baca のどちらも含まれない状態を指します。

Alice の目標は、すべての操作の終了時に、長さ $L$ の文字列を作ることです。
$L$ が与えられるので、目標を達成することが可能である、操作前の文字列 $S$ の長さの最小値を求めてください。

なお、任意の正の整数 $L$ に対して、目標を達成できる文字列 $S$ が存在することが証明できます。

制約

  • $1 \leq L \leq 10^{18}$
  • $L$ は整数

部分点

この問題には、部分点が設定されている。部分点の採点方法については、コンテストトップ を参照すること。

  1. ($50$ 点)
  • $L \leq 10$
  1. ($100$ 点)
  • $L \leq 10^3$
  1. ($100$ 点)
  • $L \leq 10^5$
  1. ($400$ 点)
  • 追加の制約はない。

入力

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

$L$

出力

Alice の目標を達成できる、操作前の文字列 $S$ の長さの最小値を出力せよ。

入力例 1
6
出力例 1
3

初期の文字列 bba とすると、次のように操作を行うことで、Aliceの目標を達成できます。
目標を達成するために、初期の文字列は長さ $3$ より短くできないため、 $3$ を出力します。

  • 操作1を行い、 $S=$ baab
  • 操作1を行い、 $S=$ aabab
  • 操作1を行い、 $S=$ aaaabb
  • 操作1と操作2のどちらもできないため、終了

この入力は、部分点 1., 2., 3., 4. の制約を満たします。

入力例 2
16
出力例 2
5

初期の文字列を bacaa とすると、次の順番で操作を行うことで、長さが $16$ になります。

  • 操作1を行い、 $S=$ aabcaa
  • 操作2を行い、 $S=$ aabaaaca
  • 操作1を行い、 $S=$ aaaabaaca
  • 操作1を行い、 $S=$ aaaaaabaca
  • 操作2を行い、 $S=$ aaaaaabaaaac
  • 操作2を行い、 $S=$ aaaaaaaabaaac
  • 操作1を行い、 $S=$ aaaaaaaaaabaac
  • 操作1を行い、 $S=$ aaaaaaaaaaaabac
  • 操作1を行い、 $S=$ aaaaaaaaaaaaaabc
  • 操作1と操作2のどちらもできないため、終了

この入力は、部分点 2., 3., 4. の制約を満たします。

入力例 3
28127
出力例 3
16

この入力は、部分点 3., 4. の制約を満たします。

入力例 4
594644939478115
出力例 4
47

この入力は、部分点 4.の制約を満たします。

提出
C++23 (g++ 12.2.0)