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\) 可以有两种操作: 交换两个位置的字符; 改变一个位 ...
随机推荐
- 使用 JsonSchema 校验 JSON数据
有时候JSON 数据格式需要校验是否合法,我们可以使用 JsonSchema 来校验数据是否合法. 引入 pom.xml https://json-schema.org/ <dependency ...
- Java 设计模式——从冰雪经济看设计模式的综合运用(工厂、单例、策略、观察者)
当冬季的寒风拂过大地,冰雪经济如同一颗璀璨的明珠,在寒冷中散发着炽热的魅力.滑雪场.冰雕展.冰雪主题酒店等各类冰雪产业蓬勃发展,其背后的运营逻辑和策略,与 Java 设计模式有着奇妙的相似之处,为我们 ...
- Chats 开发指南
Chats 开发指南 欢迎使用 Chats!在我上一篇博客 https://www.cnblogs.com/sdcb/p/18597030/sdcb-chats-intro 中,我介绍了 Chats ...
- Excel使用IF{1,0}虚拟数组+VLOOKUP实现联合查询
以此案例举例: 使用IF({1,0})建立虚拟数据的方法,整体输入的公式是: =VLOOKUP(E2&F2,IF({1,0},A:A&B:B,C:C),2,0) 输入完公式之后,需要按 ...
- 关于 K8s 的一些基础概念整理-补充【k8s系列之五】
〇.前言 本文继续整理下 K8s 的一些基础概念,作为前一篇概念汇总的补充. 前一篇博文链接:https://www.cnblogs.com/hnzhengfy/p/k8s_concept.html. ...
- 【Java】获取近六个月的年月
数据库里面存储的字段类型就是varchar,数据格式就是类似2024-12这样的年月格式. 目标: 以当前月份为标准,向前获取近6个月的年月(year_month)形成列表 // 获取近6个月的年月列 ...
- Qt通用方法及类库9
函数名 //字节数组转Ascii字符串 static QString byteArrayToAsciiStr(const QByteArray &data); //16进制字符串转字节数组 s ...
- 安装Visual Studio2015后找不到C++项目模板解决办法
安装Visual Studio2015后找不到C++项目模板解决办法: 方法1:您可以通过修改Visual Studio来完成此操作,并且可以使用以下步骤完成此操作:1.转到"添加或删除程序 ...
- Android Studio中使用Java+OpenGL ES创建Android项目
首先是使用android studio生成空白的模板文件,包含一个MainActivity文件, 在onCreate方法中参照如下注释进行修改: package com.example.wang.an ...
- 即时通讯技术文集(第44期):微信、QQ技术精华合集(Part1) [共14篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第44 期. [-1-] 微信朋友圈千亿访问量背后的技术挑战和实践总结 [链接] http:/ ...