题目

【问题背景】
zhx 和妹子们玩数数游戏。

【问题描述】

仅包含4或7的数被称为幸运数。一个序列的子序列被定义为从序列中删去若干个数, 剩下的数组成的新序列。两个子序列被定义为不同的当且仅当其中的元素在原始序列中的下标的集合不相等。对于一个长度为 N的序列,共有 2^N个不同的子序列。( 包含一个空序列)。一个子序列被称为不幸运的, 当且仅当其中不包含两个或两个以上相同的幸运数。对于一个给定序列,求其中长度恰好为 K 的不幸运子序列的个数, 答案 mod 10^9+7 输出。

INPUT

第一行两个正整数 N, K, 表示原始序列的长度和题目中的K。

接下来一行 N 个整数 ai, 表示序列中第 i 个元素的值。

OUTPUT

仅一个数,表示不幸运子序列的个数。(mod 10^9+7)

SAMPLE

INPUT1

3 2
1 1 1

OUTPUT1

3

INPUT2

4 2
4 7 4 7

OUTPUT2

4

数据规模与约定

对于50%的数据, 1 ≤N ≤ 16。

对于70%的数据, 1 ≤ N ≤ 1000, ai ≤ 10000。

对于100%的数据, 1 ≤ N ≤ 100000,K ≤ N, 1 ≤ ai ≤ 109。

解题报告

考试时打了dfs,本来以为能打前50分,结果读错题+打挂了,只拿了20= =

正解:

首先,我们想,幸运数在数据范围内最多有1022个(正确性显然,我们可以轻易地知道,在一位数中,幸运数只有4和7,而两位数中,幸运数有44,47,74,77,我们看出,其实幸运数就是由4和7组合出来的,废话,题目就是这么定义的,所以,在n位数中,就有2^n个幸运数,而显然,幸运数在数据范围内只能到9位,等比数列求和得到1022)。

那么我们可以预处理出来,我用的是dfs,然后我们就拥有了所有的幸运数,随便离散一下什么的,我们就成功的打出了一个表。

对于剩下不是幸运数的d个数来说,这就是个组合问题。所以总方案数为

对于calc,随便dp一下就好了(可以当成01背包来做,很简单的,可以压成一维)

至于组合数,我们可以递推地求

(update:应某司机要求,讲一下如何递推地求组合数。)

我们知道

那么我们就有

这就是我们的递推式,并且我们知道

这就是我们的递推边界

剩下的,要注意,在模意义下的除法,是需要求逆元的

然后就很easy了

(update over)

具体看代码吧= =

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
inline int read(){
int sum();
char ch(getchar());
for(;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';sum=sum*+(ch^),ch=getchar());
return sum;
}
typedef long long L;
const L mod();
L n,k;
L n1;
L cnt,luc[];
inline void dfs(int dep,int x){
if(x)
luc[++cnt]=x;
if(dep==)
return;
dfs(dep+,x*+);
dfs(dep+,x*+);
}
L sum[];
L f[],c[];
inline L pw(L x,L p){
L ret();
while(p){
if(p&)
ret=(ret*x)%mod;
x=(x*x)%mod;
p>>=;
}
return ret;
}
int main(){
dfs(,);
sort(luc+,luc+cnt+);
n=read(),k=read();
n1=n;
for(int i=;i<=n;i++){
int a(read());
int pos(lower_bound(luc+,luc+cnt+,a)-luc);
if(luc[pos]==a){
sum[pos]++;
if(sum[pos]==)
n1-=;
if(sum[pos]>)
n1--;
}
}
c[]=f[]=;
for(int i=;i<=cnt;i++)
if(sum[i]>=)
for(int j=i;j>;j--)
f[j]=(f[j]+f[j-]*sum[i])%mod;
for(int i=;i<=n1;i++)
c[i]=c[i-]*(n1-i+)%mod*pw(i,mod-)%mod;
L ans();
for(int i=;i<=k;i++)
ans=(ans+c[i]*f[k-i]%mod)%mod;
printf("%lld",ans);
}

[Tyvj模拟赛]运的更多相关文章

  1. [Tyvj 模拟赛] 运

    运 [问题背景] zhx和妹子们玩数数游戏. [问题描述] 仅包含4或7的数被称为幸运数. 一个序列的子序列被定义为从序列中删去若干个数,剩下的数组成的新序列.两个子序列被定义为不同的当且仅当其中的元 ...

  2. noip模拟赛 运

    [问题背景]zhx 和妹子们玩数数游戏.[问题描述]仅包含 4 或 7 的数被称为幸运数.一个序列的子序列被定义为从序列中删去若干个数, 剩下的数组成的新序列.两个子序列被定义为不同的当且仅当其中的元 ...

  3. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  4. 冲刺$\mathfrak{CSP-S}$集训模拟赛总结

    开坑.手懒并不想继续一场考试一篇文. 既没必要也没时间侧边栏的最新随笔题解反思相间也丑 而且最近越来越懒了竟然都不写题解了……开坑也是为了督促自己写题解. 并不想长篇大论.简要题解也得写啊QAQ. 目 ...

  5. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  6. NOI模拟赛 Day1

    [考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...

  7. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  8. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  9. 小奇模拟赛9.13 by hzwer

    2015年9月13日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...

随机推荐

  1. js实现数据流(日志流,报警信息等)滚动展示,并分页(含实现demo)

    在项目中有遇到,后台向前端推送数据,前端以数据流的形式展示,即来一条我增加一条,类似于日志,报警等信息展示,想必大部分人都有遇到过,本来出于想找一个好的展示方式的心态,因为感觉自己设计的不太好看,结果 ...

  2. grid栅格布局

    前面的话 Grid布局方式借鉴了平面装帧设计中的格线系统,将格线运用在屏幕上,而不再是单一的静态页面,可以称之为真正的栅格.本文将详细介绍grid布局 引入 对于Web开发者来说,网页布局一直是个比较 ...

  3. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  4. Linux系统vi模式下显示行号

    在命令模式下输入:set nu或者:set number都可以为vi设置行号,如果要取消的话,则输入:set nonu行号的设置是vi的环境设置,不会影响文本的内容.

  5. 解决jenkins下使用HTML Publisher插件后查看html报告显示不正常 以jmeter报告为例

    jenkins 配置使用html publisher查看jmeter html报告时,发现显示不全,很多东西显示不了.   项目配置:   查看html报告异常(很多资源无法加载):   控制台查看加 ...

  6. commons-logging 结合 log4j, 初始化生命周期 初探

    -------commons-logging---------- Log log=LogFactory.getLog(clazz); LogFactory这是个抽象日志工厂,更像个工具? 通过线程上下 ...

  7. 自己开源的leaf-snowflake

    拜读了美团点评技术团队博客的"Leaf--美团点评分布式ID生成系统(http://tech.meituan.com/MT_Leaf.html)"之后,收获很多.纸上得来终觉浅 绝 ...

  8. kbengine所有的demo源代码

    回复才可见的内容https://github.com/kbengine/kbengine_ue4_demo回复才可见的内容https://github.com/kbengine/kbengine_og ...

  9. etcd raft library设计原理和使用

    早在2013年11月份,在raft论文还只能在网上下载到草稿版时,我曾经写过一篇blog对其进行简要分析.4年过去了,各种raft协议的讲解铺天盖地,raft也确实得到了广泛的应用.其中最知名的应用莫 ...

  10. Machine Learning and Data Mining Lecture 1

    Machine Learning and Data Mining Lecture 1 1. The learning problem - Outline     1.1 Example of mach ...