Light OJ 1027 A Dangerous Maze (expected)
1027-A Dangerous Maze
|
PDF (English) |
Statistics |
Forum |
Time Limit: 2 second (s) |
Memory Limit: 32 MB |
You are in a maze; seeingNDoors in front of you in beginning. You can choose any door you like. The probability for choosing a door is equal for all doors.
If you chooseIthDoor, it can either take you back to the same position where you begun inXiMinutes, or can take you out of the maze afterXiMinutes. If you come back to the same position, you can't remember anything. So, every time you come to the beginning position, you have no past experience.
Now you want to find the expected time to get out of the maze.
Input
Input starts with an integerT (≤ 100), Denoting the number of test cases.
Each case contains a blank line and an integerN (1 ≤ n ≤ 100)Denoting the number of doors. The next line containsNSpace separated integers. IfIthInteger(Xi)Is positive, you can assume thatIthDoor will take you out of maze afterXiMinutes. If it's negative, thenIthDoor will take you back to the beginning position afterAbs (xi)Minutes. You can safely assume that1 ≤ abs (xi) ≤ 10000.
Output
For each case, print the case number and the expected time to get out of the maze. If it's impossible to get out of the maze, print'Inf'. Print the result inP/qFormat. WherePIs the numerator of the result andQIs the denominator of the result and they are relatively prime. See the samples for details.
Sample Input |
Output for Sample Input |
3 1 1 2 -10-3 3 3-6-9 |
Case 1: 1/1 Case 2: inf Case 3: 18/1 |
Expectation for escaping from the starting point: the departure time is p Zheng * (the average time to exit) and returns to the starting point, p negative * (fabs (average of negative values) + expectation of the starting point)
So E = p positive * (Average Time Out) + p negative * (fabs (average value of negative number) + E)
#include
#include
#include
#include#include
#include
#include
#include
#include
#include
#define L(x) (x<<1)#define R(x) (x<<1|1)#define MID(x,y) ((x+y)>>1)#define eps 1e-8//typedef __int64 ll;#define fre(i,a,b) for(i = a; i
= a;i--)#define mem(t, v) memset ((t) , v, sizeof(t))#define ssf(n) scanf("%s", n)#define sf(n) scanf("%d", &n)#define sff(a,b) scanf("%d %d", &a, &b)#define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)#define pf printf#define bug pf("Hi\n")using namespace std;#define INF 0x3f3f3f3f#define N 105int a[N];int b,s;int main(){int i,j,t,ca=0,n;sf(t);while(t--){s=b=0;int time_b=0,time_s=0;int x;sf(n);fre(i,0,n){ sf(x); if(x>0) {b++; time_b+=x;} else {s++;time_s+=-x;}} if(b==0) { pf("Case %d: inf\n",++ca); continue; } int up=time_b+time_s; int down=b; int s=__gcd(up,down); pf("Case %d: %d/%d\n",++ca,up/s,down/s);} return 0;}