题意:

  包含4,7的数成为幸运数。给一个序列,求多少个长度为k子序列满足:不包含两个及以上的相同的幸运数。(4出现两次就是不合法的,而4,7各出现一次是合法的)。

分析:

  1e9内幸运数只有2^10个,所以可以全搜出来。然后对于序列中出现的幸运数,分别统计其出现的次数。然后对这些幸运数求出合法的方案数就行了。(此处合法是指选的数字满足不能一个数出现两次及以上)。dp[i][j]表示到第i个选了j个幸运数,然后转移即可。

  最后统计答案就是,枚举选了多少个幸运数,用上面的dp数组可以直接得到,然后在非幸运数中随便选了,构成k个即可。

代码:

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cctype>
#include<cmath>
#include<set>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL; int read() {
int x = , f = ; char ch = getchar(); for (; !isdigit(ch); ch=getchar()) if (ch=='-') f = -;
for (; isdigit(ch); ch=getchar()) x = x * + ch - ''; return x * f;
} #define add(x,y) x+=y, x>=mod?x-=mod:x;
const int N = ;
const int mod = 1e9 + ; vector<int> num;
map<int,int> Id;
int cnt[N], a[N], dp[][], fac[N], ifac[N]; void dfs(int x,LL now) {
if (x == || now > 1e9) return ;
num.push_back(now);
dfs(x + , now * + );
dfs(x + , now * + );
} int ksm(int a,int b) {
int res = ;
while (b) {
if (b & ) res = 1ll * res * a % mod;
a = 1ll * a * a % mod;
b >>= ;
}
return res;
} void init(int n) {
dfs(, );
for (int i = ; i < num.size(); ++i) Id[num[i]] = i + ;
fac[] = ;
for (int i = ; i <= n; ++i) fac[i] = 1ll * fac[i - ] * i % mod;
ifac[n] = ksm(fac[n], mod - );
for (int i = n; i >= ; --i) ifac[i - ] = 1ll * ifac[i] * i % mod;
} int C(int n,int m) {
return 1ll * fac[n] * ifac[m] % mod * ifac[n - m] % mod;
} int main() { freopen("lucky.in","r",stdin);
freopen("lucky.out","w",stdout); init(); int n = read(), k = read(), m = num.size(), tot = n;
for (int i = ; i <= n; ++i) {
a[i] = read();
if (Id[a[i]]) cnt[Id[a[i]]] ++, tot --;
} dp[][] = ;
for (int i = ; i <= m; ++i) {
for (int j = ; j <= i; ++j) {
if (j) add(dp[i][j], 1ll * dp[i - ][j - ] * cnt[i] % mod);
add(dp[i][j], dp[i - ][j]);
}
} LL ans = ;
int L = max(, k - m), R = min(k, tot);
for (int i = L; i <= R; ++i) {
add(ans, 1ll * dp[m][k - i] * C(tot, i) % mod);
} cout << ans;
return ;
}

qbxt的题:运的更多相关文章

  1. 2019.10.1 qbxt模拟题

    第一题 考虑树上\(DP\),f[i][j][0/1]表示以\(i\)为根的子树,入读为零点的个数为\(j\),点\(i\)的入度为\(0\)/不为\(0\)时的方案数 转移的时候考虑\(u\)的一个 ...

  2. Qbxt 模拟题 day3(am) T3 选数字 (select)(贪心)

    选数字 (select Time Limit:3000ms Memory Limit:64MB 题目描述 LYK 找到了一个 n*m 的矩阵,这个矩阵上都填有一些数字,对于第 i 行第 j 列的位置上 ...

  3. qbxt的题:找一个三元环

    有向图中找一个三元环 题意: 考虑 N 个人玩一个游戏, 任意两个人之间进行一场游戏 (共 N*(N-1)/2 场),且每场一定能分出胜负.现在,你需要在其中找到三个人构成的这样的局面:A战胜B,B战 ...

  4. Qbxt 模拟题 day2(am) T2 jian

    [问题描述] 有N个数,随机选择一段区间,如果这段区间的所有数的平均值在[L,R]中则你比较厉害.求你比较厉害的概率. [输入格式] 第一行有三个数N, l, r,含义如上描述. 接下来一行有N个数代 ...

  5. Linux运维跳槽40道面试精华题

    Linux运维跳槽40道面试精华题 运维派 3天前 1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护 ...

  6. Qbxt AH d4 && day-6

    /* 这两天考试直接呵呵了. 赶脚对qbxt的题目无感. 同时也发现了自己的一些问题. 一些思路题总是自己傻逼的挖个坑跳进去. 这两天场场倒数ORZ. 始终是最弱的.... 然后NOIP光荣三等奖了吧 ...

  7. Linux运维跳槽必备的40道面试精华题(转)

    Linux运维跳槽必备的40道面试精华题(转)   下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华,助力大家年后跳槽找个高薪好工作. 1.什么是运维?什么是游戏运维? 1)运维 ...

  8. linux常见运维题

    linux运维题 一.填空题 1. 在Linux 系统 中,以文件方式访问设备 . (linux下一切都是文件) 2. Linux 内核引导时,从文件/etc/fstab中读取要加载的文件系统 . ( ...

  9. [真题] 一道 vsftp 运维题

    一道 vsftp 运维题 一.前言 在 V 站上凑巧看到了好友发的求助帖,五天时间一个理他的都没有.哈哈哈~ 废话不多说,我们来试试. 二.题目 这里我们假设存在这样的场景: 网络内有普通用户 ade ...

随机推荐

  1. Django settings.py 的media路径设置

    转载自:http://www.xuebuyuan.com/676599.html 在一个 models 中使用 FileField 或 ImageField 需要以下步骤: 1. 在你的 settin ...

  2. 泛型和 Any 类型

    泛型和 Any 类型 这两个类型看起来很相似,但是一定要小心两者的区别.他们区别在于 Any 类型会避开类型的检查,所以尽量少用最好不用.泛型一方面很灵活一方面也很安全,下面举个例子感受下两者的区别: ...

  3. POJ 3107 Godfather(树的重心)

    嘟嘟嘟 题说的很明白,就是求树的重心. 我们首先dfs一遍维护每一个点的子树大小,然后再dfs一遍,对于一个点u,选择子树中size[v]最小的那个和n - size[u]比较,取最大作为删除u后的答 ...

  4. python3之安装mysql问题

    python3是不能通过pip install mysql或pipinstall mysqldb这样的形式来安装mysql. 只能 pip install PyMySQL 至于如何在文件中引用? 答曰 ...

  5. SpringBoot实战(一)之构建RestFul风格

    RestFul风格是一种非常流行的架构风格,相关实战可以参考我的这篇博客:SSM框架之RestFul示例 论文可参考:https://www.ics.uci.edu/~fielding/pubs/di ...

  6. 利用maven开发springMVC项目——开发环境搭建(版本错误解决)

    申明:部分内容参见别人的博客,没有任何的商业用途,只是作为自己学习使用.(大佬博客) 一.相关环境 - eclipse :eclipse-jee-oxygen-3-win32-x86_64(下载地址) ...

  7. DataFrame查找

    一 通过索引取数据 (ix/loc/iloc) loc (根据索引名称取数据 , 适合多列) iloc (根据索引序号取数据,   适合多列) at  (和loc类似,只用于取单列, 性能更好) ia ...

  8. sdn测量综述

    一 文章名称:A Survey on Security-Aware Measurement in SDN 发表时间:2018 来源:<Security & Communication N ...

  9. uboot 移植 要点

    1.第一 首先要  学会 shell 语法   比如 变量的 概念 变量的使用 ,if 语法  ,以及简单 IF 语法(与 或预算),以及  while for 循环 等等语法,才能看得懂 uboot ...

  10. webapi文件上传和下载

    文件上传我们可以做上传文件保存到图片与导入数据,下载可以下载多样的文件. 上传:实例是单个文件导入 NopiHelper:地址 ①简单的上传图片进行保存,方法跟MVC中的一样 <form nam ...