Submission #306554


Source Code Expand

#define _USE_MATH_DEFINES
#define _CRT_SECURE_NO_DEPRECATE

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <climits>
#include <cfloat>
#include <ctime>
#include <cassert>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
#include <numeric>
#include <list>
#include <iomanip>
#include <fstream>
#include <iterator>
#include <bitset>

using namespace std;

typedef long long ll;
typedef pair<int, int> Pii;
typedef pair<ll, ll> Pll;

#define FOR(i,n) for(int i = 0; i < (n); i++)
#define sz(c) ((int)(c).size())
#define ten(x) ((int)1e##x)

template<class T> T gcd(T a, T b) { return b ? gcd(b, a % b) : a; }
template<class T> T lcm(T a, T b) { return a / gcd(a, b) * b; }
typedef unsigned long long ull;

double p[3];
double tbl[101][101][101][4];

double dfs(int p1, int p2, int p3,int game) {
	if (tbl[p1][p2][p3][game] >= 0) {
		return tbl[p1][p2][p3][game];
	}
	double ret = 1e300;
	bool first_stage = (game == 0); // 初回
	if (p1 > 0) {
		int ngame = game + 1;
		if (ngame >= 3) ngame = 0; //extraはないので
		double suc = dfs(p1 - 1, p2, p3, ngame);
		double ans;
		if (first_stage) {
			if (p[0] == 1.0) ans = 1 + suc;
			else ans = (1 + suc * p[0]) / p[0];
		} else {
			double fil = dfs(p1, p2, p3, 0);
			ans = suc * p[0] + fil * (1 - p[0]);
		}
		ret = min(ret, ans);
	}
	if (p2 > 0) {
		int ngame = game + 1;
		if (ngame >= 4) ngame = 0; //extraあり!
		double suc = dfs(p1, p2 - 1, p3, ngame);
		double ans;
		if (first_stage) {
			if (p[1] == 1.0) ans = 1 + suc;
			else ans = (1 + suc * p[1]) / p[1];
		} else {
			double fil = dfs(p1, p2, p3, 0);
			ans = suc * p[1] + fil * (1 - p[1]);
		}
		ret = min(ret, ans);
	}
	if (p3 > 0) {
		int ngame = game + 1;
		if (ngame >= 4) ngame = 0; //extraあり!
		double suc = dfs(p1, p2, p3 - 1, ngame);
		double ans;
		if (first_stage) {
			if (p[2] == 1.0) ans = 1 + suc;
			else ans = (1 + suc * p[2]) / p[2];
		} else {
			double fil = dfs(p1, p2, p3, 0);
			ans = suc * p[2] + fil * (1 - p[2]);
		}
		ret = min(ret, ans);
	}

	return tbl[p1][p2][p3][game] = ret;
}

int main() {
	int n[3];
	FOR(i, 3) cin >> n[i];
	FOR(i, 3) cin >> p[i];
	FOR(i,3) p[i] /= 100;
	FOR(p0, 101) {
		FOR(p1, 101) {
			FOR(p2, 101) {
				FOR(i, 4) {
					tbl[p0][p1][p2][i] = -1;
				}
			}
		}
	}

	FOR(i,4) tbl[0][0][0][i] = 0;

	double ans = dfs(n[0], n[1], n[2], 0);
	printf("%.15lf\n", ans);
}

Submission Info

Submission Time
Task E - Game
User math
Language C++11 (GCC 4.8.1)
Score 100
Code Size 2689 Byte
Status AC
Exec Time 374 ms
Memory 33056 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 5
AC × 22
Set Name Test Cases
Sample subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask0_sample_04.txt, subtask0_sample_05.txt
All subtask0_sample_01.txt, subtask0_sample_02.txt, subtask0_sample_03.txt, subtask0_sample_04.txt, subtask0_sample_05.txt, subtask1_manual_01.txt, subtask1_manual_02.txt, subtask1_manual_03.txt, subtask1_manual_04.txt, subtask1_manual_05.txt, subtask1_manual_06.txt, subtask1_manual_07.txt, subtask1_random_01.txt, subtask1_random_02.txt, subtask1_random_03.txt, subtask1_random_04.txt, subtask1_random_05.txt, subtask1_random_06.txt, subtask1_random_07.txt, subtask1_random_08.txt, subtask1_random_09.txt, subtask1_random_10.txt
Case Name Status Exec Time Memory
subtask0_sample_01.txt AC 73 ms 32876 KB
subtask0_sample_02.txt AC 366 ms 32940 KB
subtask0_sample_03.txt AC 72 ms 32932 KB
subtask0_sample_04.txt AC 75 ms 32932 KB
subtask0_sample_05.txt AC 74 ms 32936 KB
subtask1_manual_01.txt AC 72 ms 32932 KB
subtask1_manual_02.txt AC 74 ms 32940 KB
subtask1_manual_03.txt AC 70 ms 32936 KB
subtask1_manual_04.txt AC 374 ms 33056 KB
subtask1_manual_05.txt AC 365 ms 33000 KB
subtask1_manual_06.txt AC 236 ms 32932 KB
subtask1_manual_07.txt AC 255 ms 33012 KB
subtask1_random_01.txt AC 125 ms 33024 KB
subtask1_random_02.txt AC 97 ms 32940 KB
subtask1_random_03.txt AC 87 ms 32932 KB
subtask1_random_04.txt AC 73 ms 32928 KB
subtask1_random_05.txt AC 100 ms 32936 KB
subtask1_random_06.txt AC 127 ms 32912 KB
subtask1_random_07.txt AC 92 ms 33056 KB
subtask1_random_08.txt AC 108 ms 32932 KB
subtask1_random_09.txt AC 99 ms 32924 KB
subtask1_random_10.txt AC 94 ms 32932 KB