原神 Heuristic Contest

説明

あなたは世界中で人気のオープンワールドRPG「原神」をプレイしている。

以前、あなたは「原神 Heuristic Contest (簡易版)」に参加し、最強の聖遺物を作り上げるための最適な戦略を考えた。しかし、聖遺物のレベルを上げるためには経験値アイテムを使用するだけでなく、他の聖遺物を素材として消費することもできることに気づいた。そこで、あなたは聖遺物のレベルを上げるための最適な戦略を再考することにした。

基本的なルールは「原神 Heuristic Contest (簡易版)」と同じである。しかし、以下の点が異なる。

聖遺物のレベルを上げるための手段として、経験値アイテムの他に、他の聖遺物を素材として消費することができる。聖遺物を素材として消費することで、「消費した聖遺物に投入された経験値の80%」に3780を加えた値の経験値を加えることができる。経験値を加えられた聖遺物はそれに応じたレベルアップを行い、通常の手段でレベルアップしたときと同様にステータスが確率的に上昇する。

聖遺物を素材として消費した際、レベルアップに使用されなかった余剰経験値は聖遺物に保存され、次のレベルアップ時に使用される。ただし、聖遺物のレベルが5の場合、余剰経験値は破棄される。

限られた経験値の中でレベルアップを行うための最適な戦略を考え、実装せよ。

入力

F N M E Ei
I_1 L_1 E_1 C_1 s_1_0 s_1_1 s_1_2 ... s_1_9
I_2 L_2 E_2 C_2 s_2_0 s_2_1 s_2_2 ... s_2_9
...
I_M L_M E_M C_M s_M_0 s_M_1 s_M_2 ... s_M_9

出力

I T

スコア

プログラムが T = 0 を出力した時点で、ゲームは終了する。ゲーム終了時に、最も高い聖遺物のスコアがそのままあなたのスコアとなる。

テストケース

実行ごとに、以下の制約に基づきテストケースが生成される。

サンプルコード

以下のプログラムは、この問題に対して不正でない出力を行うプログラムである。

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;

struct Artifact {
	int id;
	int level;
	int count;
	int excessExperience;
	double s0;
	double s1;
	double s2;
	double s3;
	double s4;
	double s5;
	double s6;
	double s7;
	double s8;
	double s9;
};

int main() {
	int F, N, M, E, Ei;

	while (1) {
		cin >> F >> N >> M >> E >> Ei;

		if (cin.eof()) {
			break;
		}

		vector <struct Artifact> artifacts;

		for (size_t i = 0; i < M; i++) {
			struct Artifact artifact;
			cin >> artifact.id >> artifact.level >> artifact.excessExperience >> artifact.count >> artifact.s0 >>
					artifact.s1 >> artifact.s2 >> artifact.s3 >> artifact.s4 >>
					artifact.s5 >> artifact.s6 >> artifact.s7 >> artifact.s8 >>
					artifact.s9;
			artifacts.push_back(artifact);
		}

		if (F == 5) {
			fprintf(stdout, "%d %d\n", 1, 0);
		} else if (F == 6) {
			fprintf(stdout, "%d %d\n", 0, 0);
			break;
		} else {
			fprintf(stdout, "%d %d\n", 1, F + 2);
		}

		fflush(stdout);
	}

	return 0;
}

Submit Code

0 bytes