LightOJ 1027 A Dangerous Maze(期望)题解
题意:n扇门,每扇门后都有一个值x,如果x<0会让你等待-x再重新回到这里选择门,x>0你经过x时间就会被传送走,问你被传送走的期望
思路:假设被传送走的期望为E,那么对于x<0来说,贡献的期望为1 / n * (-x + E),对于x>0贡献的期望为1 / n * x,所以E等于这两者之和,列等式,化简之后可求得E
代码:
#include<set> #include<map> #include<stack> #include<cmath> #include<queue> #include<vector> #include<string> #include<cstdio> #include<cstring> #include<sstream> #include<iostream> #include<algorithm> typedef long long ll; using namespace std; const int maxn = 100 + 10; const int MOD = 1e9 + 7; const int INF = 0x3f3f3f3f; int gcd(int a, int b){ return b == 0? a : gcd(b, a % b); } int main(){ int n, t, ca = 1, x; scanf("%d", &t); while(t--){ int sum = 0, cannt = 0; scanf("%d", &n); for(int i = 1; i <= n; i++){ scanf("%d", &x); sum += x > 0? x : -x; if(x < 0) cannt++; } printf("Case %d: ", ca++); if(cannt == n) printf("inf\n"); else{ int Gcd = gcd(sum, n - cannt); printf("%d/%d\n", sum / Gcd, (n - cannt) / Gcd); } } return 0; }