news 2026/2/4 13:45:57

计数【牛客tracker 每日一题】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
计数【牛客tracker 每日一题】

计数

时间限制:1秒 空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

小sun最近对计数问题来了兴趣,现在他有一个问题想问问你:

有一个含有n nn个数字的序列,每个数的大小是不超过1000 10001000的正整数,同时这个序列是个单调不增序列。但是很不幸的是,序列在保存过程中有些数字丢失了,请你根据上述条件,计算出有多少种不同的序列满足上述条件,答案对1000000007 10000000071000000007取模。(具体可以看样例)

输入描述:

第一行包含一个整数n nn,表示这个序列的长度。

第二行为n nn个整数a i a_iai,用空格隔开,如果数字是0 00,代表这个数字丢失了,其他的数字都在1 ˜ 1000 1 \~\ 10001˜1000之间

输出描述:

输出一行,表示答案。

示例1

输入:

3 9 0 8

输出:

2

示例2

输入:

2 5 4

输出:

1

示例3

输入:

3 0 0 0

输出:

167167000

备注:

1 ≤ n ≤ 1 e 6 1≤n≤1e61n1e6

0 ≤ a i ≤ 1000 0≤a_i≤10000ai1000

解题思路

本题将单调不增序列的缺失位填充问题转化为组合数学隔板法求解,核心是把m mm个连续缺失位的合法填充约束(前值p r e ≥ pre≥pre填充值≥ ≥后值c u r curcur,且填充值单调不增)通过变量替换转化为非负整数解问题,对应组合数C ( p r e − c u r + m , m ) C(pre-cur+m, m)C(precur+m,m);首先预处理阶乘和逆元(快速幂求逆元),用于O ( 1 ) O(1)O(1)计算组合数,初始化前值p r e = 1000 pre=1000pre=1000(填充数最大为1000 10001000)、连续缺失位m = 0 m=0m=0、答案a n s = 1 ans=1ans=1,遍历序列统计连续0 00的个数,遇非0 00数则计算该段0 00的组合数并累乘到答案,更新p r e prepre为当前数,补a [ n + 1 ] = 1 a[n+1]=1a[n+1]=1确保最后一段0 00被处理,若原序列非0 00数不满足单调不增则答案为0 00;阶乘预处理O ( n + 1000 ) O(n+1000)O(n+1000)、遍历O ( n ) O(n)O(n),适配n ≤ 1 e 6 n≤1e6n1e6的规模,所有计算模1 e 9 + 7 1e9+71e9+7,精准统计合法序列数。

代码内容

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefpair<ll,ll>pii;constll p=1e9+7;constll N=1e6+10;constll M=1e3+10;ll fac[N],a[N];llqmi(ll a,ll b){ll res=1;while(b){if(b&1)res=res*a%p;a=a*a%p;b>>=1;}returnres;}llcomb(ll n,ll m){returnfac[n]*qmi(fac[m]*fac[n-m]%p,p-2)%p;}voidcalc(ll n){fac[0]=1;for(ll i=1;i<n+M;++i)fac[i]=fac[i-1]*i%p;}intmain(){ll n;cin>>n;calc(n);for(ll i=1;i<=n&&cin>>a[i++];);ll pre=1000,cur,m=0;ll ans=1;a[n+1]=1;for(ll i=1;i<=n+1;++i){if(a[i]==0)m++;else{if(m){ans=ans*comb(m+pre-a[i],m)%p;m=0;}pre=a[i];}}cout<<ans<<endl;return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/3 1:02:45

图片分割神器!免费开源支持多种分割方式

下载链接 https://pan.freedw.com/s/xGPJFq 今天给大家推荐这款超好用的图片分割工具&#xff0c;完全免费开源&#xff0c;再也不用为图片分割发愁了&#xff01; 软件安装很简单&#xff0c;装好后界面很清爽。支持三种分割方式&#xff1a;纵向切割、横向切割和宫格切割&a…

作者头像 李华
网站建设 2026/2/2 15:31:20

智能建站平台如何实现自动SEO?外贸网站提升自然流量的关键技术

智能建站平台如何实现自动SEO&#xff0c;助力外贸独立站快速获取自然流量&#xff1f;本文将解析AI如何帮助企业搭建多语言独立站&#xff0c;结合全球CDN加速与智能优化&#xff0c;实现网站高效曝光与精准转化。随着互联网全球化进程的加速&#xff0c;企业越来越重视品牌的…

作者头像 李华
网站建设 2026/2/3 13:43:06

SQL语言分类思维脑图

文章目录 SQL语言分类思维脑图 方案一:使用Mermaid代码在线生成 方案二:使用PlantUML代码 方案三:Markdown格式(可直接在支持Mermaid的Markdown编辑器中使用) 方案四:ASCII文本脑图(可直接复制使用) 方案五:使用在线脑图工具 方案六:Python代码生成脑图 最终推荐 SQL…

作者头像 李华
网站建设 2026/2/3 5:54:54

Firecrawl MCP

从编程协同工作的角度来看&#xff0c;在TRAE中接入Firecrawl MCP&#xff0c;相当于为你的AI助手装备了一套强大的“信息采集与处理工具箱”。它把复杂的网络爬虫技术简化为几个简单的指令&#xff0c;让你能更专注于信息的利用本身。 &#x1f6e0;️ Firecrawl MCP 核心工具…

作者头像 李华