“东信杯”广西大学第一届程序设计竞赛(同步赛) B 不吉利的数 【规律 逆元 排列组合】...

“东信杯”广西大学第一届程序设计竞赛(同步赛) 链接:https://ac.nowcoder.com/acm/contest/283/B 来源:牛客网   不吉利的数 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 在数学中,某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。 ... 阅读详情

传送门:https://ac.nowcoder.com/acm/contest/283/B

题目描述 

在 数学中,某个 序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。

假设有一条数列。可以在里面抽出指定的项组成新的子数列。

注意:子数列的次序必须和主数列的次序一样。

例如:

,只抽出双数项,就会有子数列。。

 
引用自 子序列——维基百科
在中国文化里,4和“死”谐音,7和“气”谐音,都是不吉利的含义。现在我们定义所有只由4和7组成的数字为不吉利的数字,例如4、47、74、44、7774等。
现在有一个数列array, 元素个数为 n ,给定一个数 m ,你可以在array任意选取 m 个数字的子序列,对于任何一个子序列只要有任意位置下标不同则视为不同的子序列。
例如选择下标为 与下标为 的元素作为子序列,则是不同的子序列,不论元素集合是否相同。
 
现在要求选取的数字中同一个不吉利的数最多出现一次,请问有多少种选法?
答案可能很大,请输出答案对 取模之后的结果。

输入描述:

第一行为两个整数:n和m
接下来一行为 n 个整数,其中第i个表示array[i]
所有数据满足:

输出描述:

在一行内输出一个整数表示答案
示例1

输入

复制
4 3
2 44 44 477

输出

复制
2

说明

所有选择方法中选择下标为(1,2,4)和(1,3,4)的子序列满足要求

 

题意概括:如题

解题思路:

记原数列 长度为 N

记录 每种不吉利数的个数,如果该类不吉利数只有一个那就保留在原数列中,否则把其余的都从原序列去掉。

记去掉重复不吉利数的序列长为 Slen

那么 剩下的序列里选 M 个 C( Slen, M) 这些是满足条件的子序列,但不是全部;

因为下标不同,子序列也不同。

所以我们刚才记录每种不吉利数 的个数就用上了,有多少种不吉利数就有多少个格子,而这些格子里的那个不吉利数可以替换成同种类型但是不同下标的。

举个栗子:

6 3

2 4 4 7 7 747

不吉利数 4 : 2个 

不吉利数 7:2个

不吉利数 747 :1个

那么在 4 这个格子 我们有 2 种方案,在 7 这个格子有 2 种方案,在747这个格子只有一种方案。

答案就是 C( 4, 3)*2*2*1

小技巧:求集合数是除数太大,保证精度,需要转换为逆元运算。

 

AC code:

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <map>
 6 #define INF 0x3f3f3f3f
 7 #define Mod 1000000007
 8 #define LL long long
 9 using namespace std;
10 const int MAXN = 2e5+10;
11 int aa[MAXN];
12 map<int, int>mmp;
13 int N, M;
14 LL qpow(LL x, LL n)         //求逆元
15 {
16     LL res = 1LL;
17     while(n){
18         if(n&1) res = (res*x)%Mod;
19         x = (x*x)%Mod;
20         n>>=1;
21     }
22     return res;
23 }
24 
25 LL C(LL a, LL b)    //求组合数
26 {
27     if(a < b) return 0LL; //无解
28     if(a == b) return 1LL;
29 
30     LL U = 1LL, D = 1LL;
31     for(LL i = 1; i <= a; i++) U = U*i%Mod;
32     for(LL j = 1; j <= b; j++) D = D*j%Mod;
33     for(LL j = 1; j <= a-b; j++) D = D*j%Mod;
34 //    printf("a:%lld b:%lld\n", a, b);
35 //    printf("U:%lld D:%lld\n", U, D);
36 
37     return U*qpow(D, (Mod-2LL))%Mod;
38 }
39 
40 bool check(int x)
41 {
42     int aa;
43     while(x){
44         aa = x%10;
45         if(aa != 4 && aa != 7) return false;
46         x/=10;
47     }
48     return true;
49 }
50 
51 int main()
52 {
53     scanf("%d %d", &N, &M);
54     int cnt = 0, num;
55     for(int i = 1; i <= N; i++){
56         scanf("%d", &num);
57         if(check(num)){
58             if(mmp[num] != 0) {cnt++;aa[cnt] = num;}
59             mmp[num]++;
60         }
61     }
62 
63     LL ans = C(N-cnt, M);
64 
65     for(int i = 1; i <= cnt; i++){
66         ans = (ans*mmp[aa[i]])%Mod;
67     }
68     printf("%lld\n", ans);
69     return 0;
70 }
View Code

 

Python在Windows环境下驱动乐视三合一摄像头的深度图像处理实践 本文详细介绍了在Windows系统下,使用Python驱动乐视三合一摄像头进行深度图像处理的完整实践流程。从环境配置、驱动安装、OpenNI与OpenCV库的部署,到深度与彩色数据流的读取、可视化、三维点云转换以及背景移除等应用开发,为开发者提供了从零开始掌握深度摄像头编程的实战指南。 阅读详情

相关推荐

一文详解AUTOSAR COM ComSignal结构体

ComSignalLength指定信号的长度,以字节为单位,影响数据的解析范围和精度。比如车速信号若为UINT16类型,ComSignalLength=16。这里需要注意必须ComSignalLength与ComSignalType匹配(比如FLOAT32类型需配置ComSignalLength=32),超出实际物理值范围时需配置缩放(Scaling)参数。ComSignalType定义信号的物理数据类型,决定如何解析原始字节数据。

menghuyouyou的博客 943

动态规划--最长公共子序列

  1. 子序列   摘自维基百科   在数学中,某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置而形成的新序列。 例如: 令 为一序列 那么,以下序列 是 的子序列之一。对应定义里的自然数子序列 为 ,而所对应的映射函数为 。   2. 最长公共子序列   最长公共子序列问题是寻找两个或多个已知数列最长的子序列   3. 解题思路   最长...

weixin_34214500的博客 184

手把手教你用YOLOv11-seg-LSCD搞定树脂件瑕疵检测(附数据集与代码)

本文详细介绍了如何使用YOLOv11-seg-LSCD模型进行工业级树脂件瑕疵检测,包括环境配置、数据集构建、模型训练与调优、部署优化等全流程。通过LSCD模块的创新设计,有效提升了气泡、裂纹等微小缺陷的检测精度,适用于各类树脂制品的质量检测场景。

weixin_28677005的博客 418

动态规划之最长公共子序列

最长公共子序列(LCS): 在数学中,某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置而形成的新序列。 即新序列中每个元素在原来序列中的下标是严格递增的。 最长公共子序列即在找出一个序列Z,使其既是X的子序列又是Y的子序列。 朴素的算法是枚举X序列的所有子序列,在检查该序列是否也是Y序列的子序列。而n个元素的子集是2^n个,因此时间复杂度是指数级的,数

n__nStory的专栏 1148

[Unity_Plastic SCM小技巧] 使用 UnityYAMLMerge 工具合并场景和预制件文件

首先YAMLMerge工具其实并不局限于PlasticSCM,git也可以,它是内置在Editor内的一个更加智能的版本控制工具,只不过正常不会启用,他的目录在C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe(Unity Editor安装目录),MAC上:/Applications/Unity/Unity.app/Content...

unityofficial的博客 1146

怎么选?一文读懂12种SPC控制图,从基础到进阶,再到Python代码实现

本文系统介绍了12种常用SPC控制图的应用场景和特点,包括计量型(Xbar-R图、Xbar-s图、I-MR图等)、计数型(P图、NP图、U图等)及进阶控制图(EWMA图、CUSUM图、多元控制图)。文章强调控制图是SPC的核心工具,能有效区分过程变异类型,实现"预防优于检测"的质量管理目标。通过数据示例和Python代码展示了各类控制图的实现方法,为质量管理人员提供了实用参考。

m0_56592100的博客 4160

多重影分身(c++题解)

寻找字符串中的子序列有多少种(vector数组) 恰好是WTW这种,可以少个循环

weixin_63800030的博客 455

【深度学习新浪潮】ISP芯片算法技术简介及关键技术分析

ISP(Image Signal Processor)芯片作为现代影像系统的核心组件,负责对图像传感器输出的原始信号进行后期处理。ISP的主要功能包括线性纠正、噪声去除、坏点修复、色彩校正以及白平衡调整等,这些处理步骤对于提高图像质量和视觉效果至关重要。随着科技的进步,ISP芯片不仅提升了图像的清晰度和色彩准确性,还通过高效的算法增强了拍摄体验,尤其是在低光环境下的表现。

专注:太空算力、AI infra、异构调度、大模型成本工程 1225

数组中的子数组、子序列,以及字符串的子串、子序列解释

数组中的子数组、子序列,以及字符串的子串、子序列解释数组子数组子序列字符串子串子序列 数组 子数组 子数组的定义:一个或连续多个数组中的元素组成一个子数组(子数组最少包含一个元素) 子序列 子序列的定义:子序列就是在原来序列中找出一部分组成的序列(子序列不一定连续) 在数学中,某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。 例如:数组:[1,2,3,4,5,6] ;其中一个子序列可为[2,3,6] 字符串 子串 子串定义:字符串中任意个连续的字符组成

chl183的博客 2万+

【AI Agent】Harness Engineering实践

Harness(运行宿主)是围绕 LLM构建的一套确定性工程系统,其核心职责是:承认模型的固有局限,用可控的工程手段逐一弥补,使"强大但不可靠的推理引擎"变成"可信赖的生产级Agent"模型 是发动机——提供原始动力Agent 是驾驶员——做出决策Harness 是道路、地图、护栏、仪表盘、维修站和质检线——确保行驶安全有序没有Harness,模型越强,可能只是更快地制造混乱。

sysu_lluozh 196

Open3D 使用RANSAC分割平面【2026最新版】

使用RANSAC从点云中分割平面,用segement_plane函数。博客长期更新,本文最新更新时间为:2026年2月28日。

点云侠的博客 37万+

最长公共子序列-LCS

子序列在数学中,某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。比如:ABCDEFGHI的一个子序列是ADFGI。最长公共子序列理解了子序列就能简单的理解最长公共子序列。就是对于两个序列,有一个序列三满足既是序列1的子序列也是序列2的子序列而且是满足这个条件的子序列中最长的一个,它就是序列1,2的最长公共子序列。 比如:BDCABA和ABCBDA

WilliamSun0122的博客 1048

【AIGC】大模型面试高频考点07-注意力(Attention)篇

AIGC面试高频考点

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 3364

广西大学oj1037(小西的c语言作业)

直接展示源码,采用或者用于参考的,麻烦给个赞呗,谢谢! #include <iostream> #include <cmath> #include <string> using namespace std; int main() { string s; while (cin >> s) { string a, b; char ch = ' '; int A = 0, B = 0; int flag = 1, cnt = 0, unt

qq_61773913的博客 729

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Common Subsequence

子串: 对于一个字符串变量,例如"adereegfbw",它的子串就是像"ader"这样可以从中找到的连续的字符串。字符串"adereegfbw"本身也属于它本身最长的子串。(摘自百度百科) 子序列: 在数学中,某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。(摘自维基百科) Description A subsequenc

smoggyxhdz的博客 342

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

“东信杯”广西大学第一届程序设计竞赛(同步赛)D、数论只会GCD 【博弈 分类讨论】...

传送门:https://ac.nowcoder.com/acm/contest/283/D 题目描述 小西买了一堆肥宅快乐水和肥宅快乐茶,准备和室友比谁更肥宅。 快乐水有A瓶,快乐茶B瓶。 小西和室友的规则是这样的: 1. 小西先手,轮流到每个人的回合,每个回合只能喝剩余数量较多的饮料 2. 满足规则1的同时,每次只能喝另一种饮料剩余数量的正整数倍 3. 满足1、2的同时,...

weixin_30539835的博客 200

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

“东信杯”广西大学第一届程序设计竞赛(同步赛)H 图论一顿套模版 【最短路 求对数技巧】...

传送门:https://ac.nowcoder.com/acm/contest/283/H 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 131072K,其他语言262144K64bit IO Format: %lld 题目描述 由于临近广西大学建校90周年校庆,西大开始了喜闻乐见的校园修缮工程! 然后问题出现了,西大内部有许许多多的道路,据统计有N栋楼和M条道路...

weixin_30628077的博客 244

“东信杯”广西大学第一届程序设计竞赛(同步赛)F-出装方案(二分图最大匹配/状压dp/最大费用最大流)

题目 思路来源 https://ac.nowcoder.com/acm/contest/view-submission?submissionId=37522548(MCMF) https://ac.nowcoder.com/acm/contest/view-submission?submissionId=37514575(状压dp) 心得 本来就是一个二分图最大权匹配的KM板子题...

小衣同学的博客 1488

ACM Problem B

Problem Description Michael要给自己的一本已经完成的书编上页码。众所周知,第一页页码是1,第二页页码是2,第三页页码是 3,……。而Michael敲一次键盘就能打出一个数字,例如打出1需要敲一次键盘,打出10需要敲两次键盘。页码编完之后,Michael记得自己总共敲了 n次键盘,问Michael的书有多少页。 Input 输入的第一行是整数T(0

huacai2010的专栏 605

【牛客 - 283H】图论一顿套模板(思维转化,Dijkstra)

题干:   由于临近广西大学建校90周年校庆,西大开始了喜闻乐见的校园修缮工程! 然后问题出现了,西大内部有许许多多的道路,据统计有N栋楼和M条道路(单向),每条路都有“不整洁度”W,现在校方想知道从S楼到T楼的所有路径中,“不整洁度”乘积最小是多少。 由于答案可能很大,所以你需要将最后的答案对109+7取模。 输入描述:   第一行为四个整数N、M、S、T,意义如上。 第2至第...

xuanweiace的博客 822

Java_[排序子序列]牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。

链接:https://www.nowcoder.com/questionTerminal/2d3f6ddd82da445d804c95db22dcc471?orderByHotValue=1&page=1&onlyReference=false 来源:牛客网 牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列. 如样例所示.

qq_45295130的博客 746

2019ACM/CCPC广西省赛

A Scoring Board Problem Description In programming contests, the scoring board shows each team’s judge results. Assume there is only one problem in the contest, the scoring board will show accordin...

MaJorieL 1807

【第一届文翁杯现场竞技赛T5】做作业

算法标签:模拟+差分

forever_dreams的博客 206

牛牛排序子序列

1、排序子序列 牛牛定义排序子序列为一个数组中一段连续的子序列, 并且这段子序列是非递增或者非递减排序的。 牛牛有一 个长度为n的整数数组A, 他现在有一个任务是把数组A分为若干段排序子序列, 牛牛想知道他最少可以把这个数 组分为几段排序子序列.如样例所示, 牛牛可以把数组A划分为[1, 2, 3]和[2, 2, 1]两个排序子序列, 至少需要划分为2个排序子序列 2、输入描述: 输入的第一...

weixin_43886592的博客 1427

“东信杯”广西大学第一届程序设计竞赛(同步赛)B 不吉利的数(组合数+逆元)

https://ac.nowcoder.com/acm/contest/283/B 简单组合数学: 选出一共有多少个重复的  ,不同的  #include&lt;bits/stdc++.h&gt; using namespace std; typedef long long LL; const int N=2e5+5; const int M=1e9+7; LL a[N],F[N],Fin...

qq_41668093的博客 310

动态规划-最长公共子序列

问题描述 某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置而形成的新序列。 给定两个序列X和Y,如果Z既是X的一个子序列又是Y的一个子序列,则称Z是X,Y的公共子序列。 给定两个序列X={x1,x2...,xm}和Y={y1,y2...yn},找出Z={z0,z1,…,zk}为它们的最长公共子序列. 最优子结构 设X={x1,x2...,xm}和Y={y1,y2

爱冒险的技术宅 2099
上一篇: “东信杯”广西大学第一届程序设计竞赛(同步赛)D、数论只会GCD 【博弈 分类讨论】...
下一篇: “东信杯”广西大学第一届程序设计竞赛(同步赛)F 出装方案 【KM 最大权值匹配】...
莜莫oO
博客等级 码龄9年 7粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值