• vijosP1903学姐的实习工资


    描述

    学姐去实习了, 一共实习了N天, 每一天都可以得到实习工资V[i], 这里V[1..N]被看作是整数序列.
    因为学姐很厉害, 所以V[1..N]是不下降的.
    也就是说学姐每天的工资只会越来越多, 不会变少.
    然而遗憾的是, 偷懒的学姐只记下来了其中M天的收入.
    第A[1]天获得了的工资为B[1].
    第A[2]天获得了的工资为B[2].
    第A[3]天获得了的工资为B[3].
    ...
    第A[M]天获得了的工资为B[M].
    其中A[]是递增的.
    好在她记下来了第一天和第N天的收入. 也就是说A[1]=1, A[M]=N.
    现在实习结束了, 学姐看着仅有的M天的记录, 希望知道:
    (1)工资序列V[1..N]有多少种可能情况, 满足已知的M条记录. 答案mod 1000000009.
    (2)平均来说(考虑所有可能的情况), N天中一共得到了多少工资, 答案四舍五入到小数点后第三位.
    如果doc不能回答学姐的这两个问题, 学姐会生气的!

    格式

    输入格式

    输入数据第一行给定T, 表示总的询问次数.
    对于每一次询问, 第一行给出两个整数N和M.
    第二行给出M个整数, 分别为A[1]到A[M].
    第三行给出M个整数, 分别为B[1]到B[M].

    输出格式

    对于每一次询问, 首先输出询问的编号, 参见样例输出.
    之后输出问题1和问题2的答案, 用空格隔开, 详细请参见样例输出.

    样例1

    样例输入1[复制]

    2
    6 5
    1 2 3 5 6
    3 5 10 20 20
    6 6
    1 2 3 4 5 6
    3 5 10 15 20 20

    样例输出1[复制]

    Case #1: 11 73.000
    Case #2: 1 73.000

    限制

    对于30%的数据:
    N <= 100.

    对于60%的数据:
    N <= 50000.

    对于100%的数据:
    2 <= N <= 1000000.
    M <= 1000.
    T <= 10.
    1 = A[1] < A[2] < ... < A[M] = N.
    0 <= B[1] <= B[2] <= ... <= B[M] <= 1000000.

    题解:

    终于填了这个坑。。。

    其实考场上因为没时间所以打了暴力,大概因为乘法溢出爆零了。。。然后发现需要预处理n!以及n!的逆元,这不是很随意吗。。。

    第一问用插板法算一下组合数,第二问我们可以认为b[i]到b[i+1]这里面的每个数被选到的概率都是相等的,然后期望就是(b[i]+b[i+1])/2

    然后注意乘法溢出就可以了(乘法溢出居然WA0了4次T_T)

    代码:

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<algorithm>
     6 #include<iostream>
     7 #include<vector>
     8 #include<map>
     9 #include<set>
    10 #include<queue>
    11 #include<string>
    12 #define inf 1000000000
    13 #define maxn 2000000+5
    14 #define maxm 500+100
    15 #define eps 1e-10
    16 #define ll long long
    17 #define pa pair<int,int>
    18 #define for0(i,n) for(int i=0;i<=(n);i++)
    19 #define for1(i,n) for(int i=1;i<=(n);i++)
    20 #define for2(i,x,y) for(int i=(x);i<=(y);i++)
    21 #define for3(i,x,y) for(int i=(x);i>=(y);i--)
    22 #define mod 1000000009
    23 using namespace std;
    24 inline int read()
    25 {
    26     int x=0,f=1;char ch=getchar();
    27     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    28     while(ch>='0'&&ch<='9'){x=10*x+ch-'0';ch=getchar();}
    29     return x*f;
    30 }
    31 ll fac[maxn+1],inv[2][maxn+1];
    32 bool v[maxn+1];
    33 int p[maxn+1],tot,a[maxn],b[maxn];
    34 int main()
    35 {
    36     freopen("input.txt","r",stdin);
    37     freopen("output.txt","w",stdout);
    38     for2(i,2,maxn)
    39     {
    40         if(!v[i])p[++tot]=i;
    41         for1(j,tot)
    42         {
    43             int k=i*p[j];
    44             if(k>maxn)break;
    45             v[k]=1;
    46             if(i%p[j]==0)break;
    47         }
    48     }
    49     inv[0][0]=inv[0][1]=1;
    50     for2(i,2,maxn)inv[0][i]=(ll)(mod/i+1)*inv[0][i-mod%i]%mod;
    51     fac[1]=inv[1][1]=1;
    52     for2(i,2,maxn)
    53     {
    54         fac[i]=fac[i-1]*(ll)i%mod;
    55         inv[1][i]=inv[1][i-1]*inv[0][i]%mod;
    56     }
    57     //for1(i,100)cout<<i<<' '<<fac[i]<<' '<<inv[0][i]<<' '<<inv[1][i]<<endl;
    58     int cs=read(),t=0;
    59     while(cs--)
    60     {
    61         int n=read(),m=read();ll ans=1;
    62         for1(i,m)a[i]=read();
    63         for1(i,m)b[i]=read();
    64         for1(i,m-1)if(a[i]+1!=a[i+1])
    65         {
    66             int x=b[i+1]-b[i],y=a[i+1]-a[i]-1+b[i+1]-b[i]+1-1;
    67             (ans*=fac[y]*inv[1][x]%mod*inv[1][y-x]%mod)%=mod;
    68             //cout<<i<<' '<<ans<<endl;
    69         }
    70         double sum=b[m];
    71         for1(i,m-1)
    72         {
    73             sum+=b[i];//cout<<sum<<endl;
    74             if(a[i]+1!=a[i+1])sum+=(double)(a[i+1]-a[i]-1)*(double)(b[i+1]+b[i])/2;
    75         }
    76         printf("Case #%d: %lld %.3lf
    ",++t,ans,sum);
    77     }
    78     return 0;
    79 } 
    View Code
  • 相关阅读:
    插入排序法
    二分查找
    排序算法
    牛客网 猜数游戏
    决策树及随机森林(笔记)
    knn的缺陷及改进
    区块链、比特币简易PYTHON实现版笔记
    B树,B+树,以及它们和数据库索引之间的关系
    Balanced Binary Tree
    Advantages & Disadvantages of Recursion
  • 原文地址:https://www.cnblogs.com/zyfzyf/p/4113542.html
Copyright © 2020-2023  润新知