描述

学姐去实习了, 一共实习了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)

代码:

 #include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 2000000+5
#define maxm 500+100
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define mod 1000000009
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
ll fac[maxn+],inv[][maxn+];
bool v[maxn+];
int p[maxn+],tot,a[maxn],b[maxn];
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
for2(i,,maxn)
{
if(!v[i])p[++tot]=i;
for1(j,tot)
{
int k=i*p[j];
if(k>maxn)break;
v[k]=;
if(i%p[j]==)break;
}
}
inv[][]=inv[][]=;
for2(i,,maxn)inv[][i]=(ll)(mod/i+)*inv[][i-mod%i]%mod;
fac[]=inv[][]=;
for2(i,,maxn)
{
fac[i]=fac[i-]*(ll)i%mod;
inv[][i]=inv[][i-]*inv[][i]%mod;
}
//for1(i,100)cout<<i<<' '<<fac[i]<<' '<<inv[0][i]<<' '<<inv[1][i]<<endl;
int cs=read(),t=;
while(cs--)
{
int n=read(),m=read();ll ans=;
for1(i,m)a[i]=read();
for1(i,m)b[i]=read();
for1(i,m-)if(a[i]+!=a[i+])
{
int x=b[i+]-b[i],y=a[i+]-a[i]-+b[i+]-b[i]+-;
(ans*=fac[y]*inv[][x]%mod*inv[][y-x]%mod)%=mod;
//cout<<i<<' '<<ans<<endl;
}
double sum=b[m];
for1(i,m-)
{
sum+=b[i];//cout<<sum<<endl;
if(a[i]+!=a[i+])sum+=(double)(a[i+]-a[i]-)*(double)(b[i+]+b[i])/;
}
printf("Case #%d: %lld %.3lf\n",++t,ans,sum);
}
return ;
}

vijosP1903学姐的实习工资的更多相关文章

  1. cdoj 1328 卿学姐与诡异村庄 Label:并查集 || 二分图染色

    卿学姐与诡异村庄 Time Limit: 4500/1500MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  ...

  2. Vijos1901 学姐的钱包

    描述 学姐每次出门逛街都要带恰好M元钱, 不过她今天却忘记带钱包了.可怜的doc只好自己凑钱给学姐, 但是他口袋里只有一元钱.好在doc的N位朋友们都特别有钱, 他们答应与doc作一些交换.其中第i位 ...

  3. cdoj 1329 卿学姐与魔法 优先队列

    卿学姐与魔法 Time Limit: 1200/800MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...

  4. cdoj 1324 卿学姐与公主 线段树裸题

    卿学姐与公主 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit St ...

  5. vijos1891 学姐的逛街计划(线性规划)

    P1891学姐的逛街计划 描述 doc 最近太忙了, 每天都有课. 这不怕, doc 可以请假不去上课.偏偏学校又有规定, 任意连续 n 天中, 不得请假超过 k 天. doc 很忧伤, 因为他还要陪 ...

  6. 2014.11.12模拟赛【美妙的数字】| vijos1904学姐的幸运数字

    美妙的数字(number.c/.cpp/.pas) 题目描述 黄巨大认为非负整数是美妙的,并且它的数值越小就越美妙.当然0是最美妙的啦. 现在他得到一串非负整数,对于每个数都可以选择先对它做二进制非运 ...

  7. UESTC - 1324 卿学姐与公主

    题目链接 某日,百无聊赖的卿学姐打开了某11区的某魔幻游戏 在这个魔幻的游戏里,生活着一个美丽的公主,但现在公主被关押在了魔王的城堡中. 英勇的卿学姐拔出利刃冲向了拯救公主的道路. 走过了荒野,翻越了 ...

  8. ATP学姐的模拟赛

    ATPの水题大赛 声明:不是我觉得这题水,这就是本场模拟赛的名称. T1:求所有的$n$位数中有几个数满足:每一位要么是$A$要么是$B$,并且这个$n$位数的每一位加起来是$A$或$B$的倍数. $ ...

  9. 卿学姐与公主 UESTC - 1324 分块模板题

    题意:http://acm.uestc.edu.cn/#/problem/show/1324 中文题,自己看喽. 题解:分块模板,update时顺便更新块属性.ask时先判掉belong[l]==be ...

随机推荐

  1. c语言学习之基础知识点介绍(十八):几个修饰关键字和内存分区

    一.几个修饰关键字 全局变量: 全局变量跟函数一样也分为声明和实现.如果是全局变量,实现在它调用之后,那么需要在调用之前进行声明.注意:全局变量的声明只能写在函数外,写在函数就不是全局变量了而是局部变 ...

  2. php 5.3 配置mssql笔记

    参考URL  https://docs.moodle.org/29/en/Installing_MSSQL_for_PHP#Using_FreeTDS_on_Debian_Lenny 第一步,下载相应 ...

  3. html结构,第一节

    第1步: 新建一个txt文件,重命名为index.html; 第2步: 打开方式:记事本,输入下面代码: <html> <head> <title>我的第一个网页& ...

  4. SSH中调用另一action的方法(chain,redirect)

      从一个Action直接跳到另一个Action中,Struts提供了两种结果类型可以实现:chain.redirect.        从Servlet中学到重定向是不能保留参数的,也就是说重定向了 ...

  5. (转)IOS中获取各种文件的目录路径的方法

    iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...

  6. AJAX 一些常用方法

    abort() 停止当前请求getAllResponseHeaders() 返回包含HTTP请求的所有响应头信息,其中响应头包括Content-Length,Date,URI等内容.getRespon ...

  7. foreach的一点理解

    首先什么样的数据才能实现foreach 1 实现IEnumerable这个接口 2 有GetEnumerable()这个方法 然后为啥实现这个接口或者有这个方法就可以实现foreach遍历 首先我先用 ...

  8. 『奇葩问题集锦』function * (next){ 执行报错 SyntaxError: Unexpected token *

    这是因为  app.use(function * (){ 语句中有一个 * ,这种方式被称为generator functions ,一般写作function *(){...} 的形式,在此类func ...

  9. centos下redis安装

    下载redis http://www.redis.cn/download.html 下载php的redis扩展 https://github.com/phpredis/phpredis#install ...

  10. 跨线程操作UI控件

    写程序的时候经常会遇到跨线程访问控件的问题,看到不少人去设置Control.CheckForIllegalCrossThreadCalls = false;这句话是告诉编译器不要对跨线程访问作检查,可 ...