No.5003 物理好きクリッカー
タグ : / 解いたユーザー数 51
作問者 :
メモ
中の人はマラソン初作問なので、最適解が求まってしまうかもしれません。ご了承ください。
本人もこの問題に挑戦するためテストは最低限なのでジャッジがまだ不安定な可能性があります。ジャッジに怪しい点があれば質問から伝えていただければ対応します。
コンテスト後のリジャッジ等は予定していません。
質問は、出題開始から1時間はすぐに対応される予定です。
以降も応対しますが、返答が遅くなる可能性があります。
順位表は上のスコア順
から御覧ください。
提出はCE
を除き5分以上開けて提出してください。
誤回答へのヒント
1行出力ごとにflush
して行い、使わなかったとしても直後に入力を1行受け取るようにしてください。
ジャッジコード
ジャッジコードhttps://yukicoder.me/run/c1d01dfdf9651
実行仕様はこちら
gcc8 -O2 -lm -std=c11 -o judge.out judge.c yes ok | head -n 10000 >> case.txt cat case.txt | ./a.out >out.txt cat out.txt | ./judge.out case.txt out.txt out.txt score.txt > judge_out.txt | cat score.txt
ストーリー
あなたは「物理好きクリッカー」というゲームにハマっています。
そのゲームの内容は、以下のものです。
あなたはある村に住んでいます。 この村には、村一番の美少女である物理好きさんも住んでいます。 物理好きさんはクッキーを焼くのがとても上手です。 ここで、あなたを含めた村人たちは、こぞって物理好きさんのクッキーを求めて物理好きさんにあの手この手でアプローチを仕掛けます。 あなたは物理好きさんからどれだけ多くのクッキーを手に入れることが出来ますか?
概要
この問題は、リアクティブジャッジにより実際にこのゲームをプレイする、というものです。
このゲームの目的はゲーム終了時に所有しているクッキーの枚数を最大化することです。
ゲーム開始時のクッキーの所有枚数は0枚で、このゲームは$N$ターンからなります。(12/01 00:18追記)
各ターンの流れは次のようなものです。
1.行動フェーズ
プレイヤーは各ターンごとに何らかの行動を起こせます。
このターンでプレイヤーは行動を1つ出力します。
2.施設によるクッキーの生産
このタイミングで施設によるクッキーの生産が行われます。施設については後述します。
3.特殊効果フェーズ
ターンごとに特殊効果が発生します。
繰り返しになりますが、あなたの目標は、ゲーム終了時(=最終ターン終了時)に所有しているクッキーの枚数を最大化することです。
「今までに焼いた累積枚数」などのパラメータはスコアには影響しないので注意してください。
クッキーの入手方法
クッキーは、以下の方法で入手できます。
1.クッキーをクリックする
クッキーをクリックすると、一定数のクッキーが入手できます。
2.施設から生産する
クッキーを用いて施設を購入すると、毎ターン終了後に一定数のクッキーを入手できます。
3.施設を売却する
施設を売却することによって、クッキーが手に入ります。
クッキーの使用方法
クッキーは以下の用途で使用できます。
1.施設を購入する
クッキーを生産する施設を購入します。(12/01 00:05修正)
2.特定の施設を強化する
ある特定の施設の生産性を強化できます。
3.クリックの生産性を強化する
クリックの生産性を強化できます。
行動フェーズ
各ターンでは次の行動をどれか1つだけ起こせます。(出力フォーマットとともに示します)
1:クッキーをクリック
clickクッキーを1回クリックします。
2:施設を購入
buy (施設名)施設を1つ購入します。
3:施設を売却
sell (施設名)施設を1つ売却します。(対象の施設を1つ以上保有している必要があります)
4:特定の施設を強化
reinforce (施設名)ある特定の施設を1段階強化します。(対象の施設を1つ以上保有している必要があります)
5:クリックの生産性を強化する
enhclickクリックの生産性を1段階強化します。
6:何もしない
nothing何もしません。
ジャッジに行動を出力すると、その成否で返答が変化します。
ok
:操作が成功したことを表します。-1
:操作が失敗、操作に必要なクッキーが不足しています。-2
:操作が失敗、施設売却や強化の際、対象の施設が存在していません。-3
:操作が失敗、不明な行動です。-4
:操作が失敗、不明な施設名です。操作が失敗した場合でも、即時
WA
扱いとはならず行動nothing
扱いとなります。具体的な施設の内容や必要なクッキー、クリックごとや毎ターンの生産性などの計算式は「生産性、施設、強化について」を参照してください。
生産性、施設、強化について
施設一覧は次の通りです。
$
\begin{array}{|c|c|c|c|}
\hline
施設名 & 基本生産性(\frac{枚}{個*ターン}) & 基本価格(枚) & 役割 \\
\hline
hand & 1 & 150 & 物理好きさんを撫でてクッキーを増産する手です。 \\
\hline
lily & 10 & 2000 & 物理好きさんに贈って喜ばせ、クッキーを増産するための百合です。 \\
\hline
factory & 120 & 30000 & 物理好きさんに経営させるためのクッキー工場です。 \\
\hline
casino & 2000 & 600000 & 物理好きさんにクッキーを賭けたギャンブルをしてもらうカジノです。 \\
\hline
grimoire & 25000 & 10000000 & 物理好きさんが分身の術を習得するための魔導書です。 \\
\hline
\end{array}
$
行動の際施設名を出力するときは、全て英小文字で出力してください。
例:buy hand
sell lily
reinforce factory
・施設によるクッキーの生産量について
施設によるクッキーのターン毎の総生産量は以下の式で表されます。
$
ターン毎の総生産量(\frac{枚}{ターン}) = \sum_{全施設}^{} (基本生産性(\frac{枚}{個*ターン}))*(その施設の保有数(個))
$
・施設の購入額について(12/01 00:39修正)
施設を$i-1$個保有している際、$i$個目のある施設の購入額を$A_i$とすると、$A_i$は次の漸化式で表現されます。
$\begin{cases}
A_1=(基本価格(枚)) \\
A_{i+1}=\lceil \frac{6*A_i}{5} \rceil
\end{cases}
$
ある施設を1つも保有していない場合、基本価格で購入できますが、施設を1つ保有しているごとに価格が1.2倍(小数点以下切り上げ)になります。
施設を売却する場合、その施設を$X$個保有していた場合、$X$個目の価格の25%(小数点以下切り上げ)の額で売却されます。
・施設、クリックの強化について
施設は1度強化すると、同じ施設すべての基本生産性の値が2倍になります。(12/01 00:27追記)
クリックも1度強化すると、クリック毎の生産量が2倍になります。なお、強化なしでのクリック毎の生産量は1(枚/回)です。
$i$回目のある施設やクリックの強化額を$A_i$とすると、$A_i$は次の漸化式で表現されます。
$\begin{cases}
A_1=(その施設の基本価格(枚)*10)(但し、クリックのA_1=15とする) \\
A_{i+1}=10*A_i
\end{cases}
$
ある施設の1段階目の強化は基本価格*10(但しクリックは15)で出来ますが、施設を1段階強化するごとに価格が10倍になります。
なお、強化については売却できないこと、その施設を1つ以上保持していないと強化できないこと、仮に施設を全売却したのち再び購入しても強化は維持されることに留意してください。(12/01 00:48追記)
特殊効果フェーズ
行動フェーズが終わると、施設からクッキーが生産され、特殊効果がターンの終わりに発動します。
特殊効果は、ゲーム開始時に文字列の形で与えられ、$i$ターン目終了後には$S_i$文字目に対応する効果が発生します。
$S_i=$B
:Bonus!
所持しているクッキーの1%(小数点以下切り上げ)が支給される。(但し、この支給量はFever!の影響を受けない。)
$S_i=$F
:Fever!
次の20ターンの間、クッキーの生産量が7倍になる。(Fever同士が重なることはない)
$S_i=$S
:Sale!
次のターンに、全ての購入(クッキーを消費する動作)について価格が10%引き(正確には、価格が90%になった後小数点以下切り上げ)となる。(12/01 01:06追記)
$S_i=$N
:Nothing
何も発生しない。
特殊効果の生成について
最初200ターンのうちいずれかのターン(ターン毎に一様な確率)で、最初の特殊効果が発生する。
その後、前の特殊効果が発生した100~200ターン(ターン毎に一様な確率)後に次の特殊効果が発生する、ということを繰り返す。
特殊効果は3種が一様な確率で選ばれる。
入力
$N$ $S$・制約
$N = |S| = 10000(|S|は文字列Sの長さ)$
$S_i \in \{$
B
,F
,S
,N
$\}$テストケースは32個からなります。
あるテストケースにおいて最終的に所有していたクッキーの枚数がそのままテストケースの得点となり、最終的な得点はすべてのテストケースの得点の総和となります。
入出力上の注意
ジャッジからの入力を(最後のものを含め)必ず全て読み込んでください。しなかった場合WAが発生する可能性があります。
各々の出力ごとに、出力をflushしてください。しなかった場合TLEが発生する可能性があります。
例えば、C言語では
fflush(stdout);のように行います。
詳しくはこちらを参照してください。
リアクティブなやり取りには時間がかかる(C言語において10000回のやりとりで500ms程度)ので、まずプログラムの中で求解してからジャッジとやりとりをすることをお勧めします。
以下にC言語による、全てのターンで何もしないプログラムを示します。(12/01 00:13追記)
#include<stdio.h> int main(void){ int i,n; char s[10005]; scanf("%d%s",&n,s); for(i=0;i<n;i++){ printf("nothing\n"); fflush(stdout); scanf("%s",s); } return 0; }
サンプル
ここでは、現在クッキーを200枚所持していて、施設は現在何も持っておらず、クリックの強化もしておらず、特殊効果はこのターンからBSNFN
…(実際はここまで密集することはありません)と続くものとします。ターン1:
clickクッキーは201枚になります。
このターンの終わりにBonus!によりクッキーが3枚支給され、204枚になります。
ターン2:
buy hand手を買います。クッキーは54枚になります。
その後、手によって1枚クッキーが生産され、55枚になります。
このターンの終わりにSale!が発動するので、次のターンの購入は10%引きです。
ターン3:
enhclickクリックを強化します。本来の値段は15枚ですがSale!の効果で14枚となり、残りのクッキーは41枚となります。
その後、手によって1枚クッキーが生産され、42枚になります。
ターン4:
clickクリックによる生産性が2倍になったので、クッキーは44枚となります。
その後、手によって1枚クッキーが生産され、45枚になります。
このターンの終わりにFever!が発動するので、次のターンから20ターンは生産量が7倍になります。
ターン5:
click強化とFever!の効果でクリックの生産性が14倍となったので、クッキーは59枚となります。
その後、手によって7枚クッキーが生産され、66枚になります。
なお、ジャッジからの返答はすべて
ok
です。提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。