第二题,枚举最小值 x ,然后算 x*( 最小值为x的情况总数 )之和sum。最后用sum / 所有的情况数。这种方法能过吗?我这么写只过了10%。 代码: #include<bits/stdc++.h> using namespace std; typedef long long LL; const int maxn = 2005; int l[maxn],r[maxn],cnt[maxn][maxn]; double sum[maxn]; int main(){ int n; scanf("%d",&n); int mnl = 2001,mnr = 2001; for( int i = 1;i <= n;i++ ){ scanf("%d",&l[i]); mnl = min( mnl,l[i] ); } for( int i = 1;i <= n;i++ ){ scanf("%d",&r[i]); mnr = min(mnr,r[i]); } for( int i = 1;i <= 2000;i++ ){ sum[i] = 1; for( int j = 1;j <= n;j++ ){ if( i <= r[j] ){ cnt[j][i] = min( r[j]-l[j]+1,r[j]-i+1 ); } sum[i] *= cnt[j][i]; } } double cc = 1; for( int i = 1;i <= n;i++ ){ cc *= r[i]-l[i]+1; } double ans; for( int i = mnl;i < mnr;i++ ){ ans += i*(sum[i]-sum[i+1]); } ans += mnr*( sum[mnr] ); ans /= cc; cout << ans; return 0; }
点赞 2
牛客网
牛客网在线编程
牛客网题解
牛客企业服务