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=n−up2i=1∑nabs(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); } }