今天的比赛是在外网进行的,所以我不必像昨天一样痛苦的在把题目粘上来了(根本无法忍受它坑爹的排版!!)。   恐惧的是,当我看到第一题第一眼的时候就意识到绝壁要跳过去(数学期望值。。可以可以),但是经过详细的讲解(并没有),终于还是到了写题解的时候了!!   膜拜了大犇的代码后,我只感到了深深的。。嗯,反正先上代码吧:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
ll n;
double ans1,ans2;
int main(){
 freopen("solo.in","r",stdin);
 freopen("solo.out","w",stdout); 
 cin>>n;
 for(ll i=1,fac=1;fac<=n;i++,fac<<=1){
  ll num=n/(fac<<1)*fac+max(n%(fac<<1)-fac,0ll),num0=n-num;
  ans1+=(double)num/n*(double)num/n*fac;
  ans2+=(double)num/n*(double)num0/n*2*fac;
 }
 printf("%.6e\n%.6e",ans1,ans2+ans1);
}

  那么,数学期望值究竟是怎样的一个东西呢? {% cq %} 在概率论和统计学中,数学期望(mean)(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和的平均。是最基本的数学特征之一。它反映随机变量平均取值的大小。 {% endcq %}   嗯,具体的自己去谷歌吧,实在是不想写(毕竟粘别人的不太好)

  至于第二题,哈哈,先看一眼这惨淡的战绩:   至于cl大佬为甚么A了别人W的点,W了别人A的点,,嗯,我看了看他的代码(dp!!简直强无敌),我是蒟蒻就不做点评了。   

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<cstdio>
#include<algorithm>
#define INF (ll)1<<62
using namespace std;
typedef long long ll;
int n,k;
ll a[100010]={0};
ll x,y;
int main(){
 freopen("qwa.in","r",stdin);
 freopen("qwa.out","w",stdout);
 scanf("%d%d",&n,&k);
 for (int i=1;i<=n;i++){
  scanf("%lld",&a[i]);
 }
 sort(a+1,a+n+1);
 ll ans=INF,now=0,sum=0;
 for (int i=1;i<=k;i++){
  now=now+(ll)(i-1)*a[i]-sum;
  sum=sum+a[i];
 }
 for (int i=k+1;i<=n;i++){
  ans=min(ans,now);
  sum-=a[i-k];
  now-=sum-a[i-k]*(k-1);
  now+=(k-1)*a[i]-sum;
  sum+=a[i];
 }
 ans=min(ans,now);
 printf("%lld",ans);
}

  思路也十分清晰,首先是一个从1到k的循环先把前k项的距离算出来,然后在慢慢地向后移动(即从k+1到n,每次将最右边元素加入,最左边的元素踢出,然后计算值后进行比较,最后得到最小值)

     接下来就是第三道题