loj1027 A Dangerous Maze(简单期望)

it2023-06-21  67

loj1027

n n n扇门,每扇门有一个 x i x_i xi

如果 x i > 0 x_i>0 xi>0,花费这么多时间可以出去

如果 x i < 0 x_i<0 xi<0,花费 − x i -x_i xi的时间重新做出选择


定义逃出去的期望是 k k k

对于那些 x i > 0 x_i>0 xi>0的门,总和是 ∑ x i \sum x_i xi

对于那些 x i < 0 x_i<0 xi<0的门,总和是 ∑ ( − x i + k ) \sum (-x_i+k) (xi+k)

那么很容易解得 k k k

k = ∑ u p 1 x i + ∑ u p 2 ( − x i + k ) k=\sum \limits_{}^{up1}x_i+\sum\limits_{}^{up2}(-x_i+k) k=up1xi+up2(xi+k)

化简得 k = ∑ i = 1 n a b s ( x i ) n − u p 2 k=\frac{\sum\limits_{i=1}^{n}abs(x_i)}{n-up_2} k=nup2i=1nabs(xi)

#include <bits/stdc++.h> using namespace std; int n,t; int gcd(int a,int b){ //cout << a << " " << b << endl; return b==0?a:gcd(b,a%b); } int main() { cin >> t; int casenum=0; while( t-- ) { cin >> n; int zi=0,mu=n; for(int i=1;i<=n;i++) { int x; cin >> x; zi += abs(x); if( x<0 ) mu--; } if( mu==0 ) { printf("Case %d: inf\n",++casenum); continue; } int yin=gcd(zi,mu); printf("Case %d: %d/%d\n",++casenum,zi/yin,mu/yin); } }
最新回复(0)