CF145C Lucky Subsequence 题解
首先,我们对这个幸运数进行分析,发现:
- \(10^9\) 以内只有 \(1023\) 个幸运数,即 \(\sum\limits_{i=0}^92^i\) 个。
考虑对幸运数和非幸运数分类讨论。
- 幸运数部分:
01 背包裸题,\(dp_{i,j}\) 表示前 \(i\) 个幸运数里选了 \(j\) 个,转移方程为 \(dp_{i,j}=dp_{i-1,j}+dp_{i-1,j-1}\times num_i\),可滚动数组。 - 非幸运数部分
设选了 \(j\) 个幸运数,一共有 \(m\) 个非幸运数,则有 \(C_m^{k-i}\) 种可能性。
所以答案就是 \(\sum\limits_{i=0}^{\min(l,k)}dp_{l,i}\times C_m^{k-i}\),其中 \(l\) 为幸运数的种类数。
时间复杂度 \(O(l^2+n)\)。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll p=1e9+7;
const int N=1e5+5,M=1025;
ll qpow(ll x,int y){
ll re=1;
while(y){
if(y&1) re=re*x%p;
x=x*x%p;
y>>=1;
}return re;
}int n,k,m,l;
ll jc[N],inv[N],dp[M],num[M],ans;
unordered_map<int,int>a;
void init(){
jc[0]=inv[0]=1;
for(ll i=1;i<=n;i++){
jc[i]=jc[i-1]*i%p;
inv[i]=qpow(jc[i],p-2);
}
}ll C(int x,int y){
if(x<y) return 0;
return jc[x]*inv[y]%p*inv[x-y]%p;
}int check(int x){
while(x){
int y=x%10;
if(y!=4&&y!=7)
return 0;
x/=10;
}return 1;
}int main(){
cin>>n>>k;
init();
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(check(x)){
if(!a[x]) a[x]=++l;
num[a[x]]++;
}else m++;
}dp[0]=1;
for(int i=1;i<=l;i++)
for(int j=min(i,k);j;j--)
dp[j]=(dp[j]+dp[j-1]*num[i])%p;
for(int i=0;i<=min(l,k);i++)
ans=(ans+dp[i]*C(m,k-i))%p;
cout<<ans;
return 0;
}
CF145C Lucky Subsequence 题解的更多相关文章
- CodeForces 146E Lucky Subsequence(组合数+DP)
题目描述 Petya loves lucky numbers very much. Everybody knows that lucky numbers are positive integers w ...
- CodeForces 146E - Lucky Subsequence DP+扩展欧几里德求逆元
题意: 一个数只含有4,7就是lucky数...现在有一串长度为n的数...问这列数有多少个长度为k子串..这些子串不含两个相同的lucky数... 子串的定义..是从这列数中选出的数..只要序号不同 ...
- [LeetCode] Is Subsequence 题解
前言 这道题的实现方法有很多,包括dp,贪心算法,二分搜索,普通实现等等. 题目 Given a string s and a string t, check if s is subsequence ...
- Hdoj 1159.Common Subsequence 题解
Problem Description A subsequence of a given sequence is the given sequence with some elements (poss ...
- LuoguP7059 [NWRRC2015]Lucky Chances 题解
Content 有一个名叫 Lucky chances 的游戏,游戏一开始给出一个 \(r\times c\) 的矩阵,你可以选定矩阵中任意一个元素以及上.下.左.右四个方向中的任意一个方向进行游戏. ...
- CF808A Lucky Year 题解
Content 年份中有不超过 \(1\) 个非 \(0\) 数字的年份是幸运年份.现给出当前年份 \(n\),求到下一个幸运年份还要等多久. 数据范围:\(1\leqslant n\leqslant ...
- 2015浙江财经大学ACM有奖周赛(一) 题解报告
2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...
- 【AtCoder】AGC026 题解
A - Colorful Slimes 2 找相同颜色的一段,然后答案加上段长除2下取整 代码 #include <iostream> #include <cstdio> us ...
- [Leetcode] Longest Palindromic Subsequence
Longest Palindromic Subsequence 题解 题目来源:https://leetcode.com/problems/longest-palindromic-subsequenc ...
- Codeforces Round #104 (Div. 1)
A.Lucky Conversion 题意 给定两个长度为 \(N(N \le 10^5)\) 且由4和7构成的 \(a, b\)串 对 \(a\) 可以有两种操作: 交换两个位置的字符; 改变一个位 ...
随机推荐
- TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面
前言 前篇文章使用Tesseract进行图片文字识别介绍了如何安装TesseractOCR与TesseractOCR的命令行使用.但在日常使用过程中,命令行使用还是不太方便的,因此今天介绍一下如何使用 ...
- 在Python工具箱中,创建对应子工具集
目录 问题描述 实现方法 问题描述 在Pro中,新建自定义工具箱后,直接通过操作可以添加工具集. 但是新建python工具箱后,却没有新建的操作.因为python工具箱的对象定义,都是在脚本中定义的, ...
- less 常用方法
介绍 Less 是 CSS 的预处理语言之一,为 CSS 增添了变量.Mixin.函数等特性,使CSS更易于维护扩展. 嵌套(Nesting) .header { .navgation: { font ...
- legend不显示
legend写了对应的data,在series需要填写对应的name
- OpenTelemetry.NET API
OpenTelemetry.NET API Status and Releases Tracing Metrics Logging 1.0 Alpha Beta 安装 dotnet add packa ...
- 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-8- 元素高级定位技巧(详细教程)
1.简介 随着网页的复杂性和动态性的增加,自动化测试变得越来越重要.Playwright作为一款强大的无头浏览器测试库,提供了多种元素定位方式,使得我们能够轻松地对网页进行自动化操作.在基础的定位方式 ...
- 【uni-app】【01】底部导航栏与页面切换
1.(配置文件在哪)uni-app 路由控制是在 pages.json文件中的. 2.(基本配置项有哪些)初学的时候主要有三个配置项,①pages ② globalStyle ③ tabbar [!T ...
- 【前端】【JavaScript】通过成绩判断等级
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 部署SkyWalking
SkyWalking部署说明 二进制包部署 1.下载地址 https://dlcdn.apache.org/skywalking/9.4.0/apache-skywalking-apm-9.4.0.t ...
- 浅谈 IoT 如何助力制造业企业实现数字化落地
物联网作为新一代信息技术的重要组成部分,正在加速渗透到各行各业,成为经济社会数字化转型的关键支撑.根据中商产业研究院发布的<2022-2027 年中国物联网市场需求预测及发展趋势前瞻报告> ...