| Time Limit: 2 second(s) | Memory Limit: 32 MB |
You are in a cave, a long cave! The cave can be represented by a 1 x N grid. Each cell of the cave can contain any amount of gold.
Initially you are in position 1. Now each turn you throw a perfect 6 sided dice. If you get X in the dice after throwing, you add X to your position and collect all the gold from the new position. If your new position is outside the cave, then you keep throwing again until you get a suitable result. When you reach the Nthposition you stop your journey. Now you are given the information about the cave, you have to find out the expected number of gold you can collect using the given procedure.
Input
Input starts with an integer T (≤ 100), denoting the number of test cases.
Each case contains a blank line and an integer N (1 ≤ N ≤ 100) denoting the dimension of the cave. The next line contains N space separated integers. The ithinteger of this line denotes the amount of gold you will get if you come to the ith cell. You may safely assume that all the given integers will be non-negative and no integer will be greater than 1000.
Output
For each case, print the case number and the expected number of gold you will collect. Errors less than 10-6 will be ignored.
Sample Input | Output for Sample Input |
| 3
1 101
2 10 3
3 3 6 9 | Case 1: 101.0000000000 Case 2: 13.000 Case 3: 15 |
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <vector>
#define INF 0x3f3f3f3f
#define eps 1e-8
#define MAXN (3000+10)
#define MAXM (50000000)
#define Ri(a) scanf("%d", &a)
#define Rl(a) scanf("%lld", &a)
#define Rf(a) scanf("%lf", &a)
#define Rs(a) scanf("%s", a)
#define Pi(a) printf("%d\n", (a))
#define Pf(a) printf("%lf\n", (a))
#define Pl(a) printf("%lld\n", (a))
#define Ps(a) printf("%s\n", (a))
#define W(a) while(a--)
#define CLR(a, b) memset(a, (b), sizeof(a))
#define MOD 1000000007
#define LL long long
#define lson o<<1, l, mid
#define rson o<<1|1, mid+1, r
#define ll o<<1
#define rr o<<1|1
using namespace std;
int gcd(int a, int b){
return b == 0 ? a : gcd(b, a%b);
}
double dp[110], num[110];
int main()
{
int t, kcase = 1; Ri(t);
W(t)
{
int n; Ri(n);
for(int i = 0; i < n; i++)
Rf(num[i]), dp[i] = num[i];
for(int i = n-2; i >= 0; i--)
{
int choose = min(6, n - i - 1);
for(int j = 1; j <= choose; j++)
dp[i] += dp[i+j] / (double)choose;
}
printf("Case %d: %.7lf\n", kcase++, dp[0]);
}
return 0;
}
你身处一个可以用1xN网格表示的洞穴,每个格子可能含有不同数量的黄金。从位置1开始,每次扔一枚六面骰子,根据掷出的点数前进并收集相应位置的黄金。如果到达洞穴末端N,则停止探索。给定洞穴的黄金分布,你需要计算按指定规则探索的预期黄金总和。输入包含测试用例数T和每个洞穴的尺寸N,接下来是N个表示各格黄金数量的整数。输出每个案例的编号和预期收集的黄金数量,误差小于10^-6会被忽略。

2238





