当前位置: 首页 > news >正文

【蓝桥杯 2024 国 Java A】粉刷匠小蓝

【蓝桥杯 2024 国 Java A】粉刷匠小蓝


蓝桥杯专栏:2024 国 Java A
算法竞赛:数学,组合数学,排列组合,排列数
题目连接:洛谷【蓝桥杯 2024 国 Java A】粉刷匠小蓝

题目描述:
小蓝是一名勤劳的粉刷匠,今天他收到了一份来自蓝桥学院的委托,需要为学院的 nnn 面墙进行粉刷。这 nnn 面墙从左到右依次排列,编号从 111nnn。起初,所有墙的颜色均为白色。
学院希望小蓝能将其中一部分墙刷成蓝色,以营造一种冷色调的艺术氛围。为此,学院给小蓝提供了一个长度为 nnn 的数组 {a1,a2,⋯,an}\{a_1, a_2, \cdots, a_n\}{a1,a2,,an},来指定每面墙的颜色要求。具体地,如果 ai=0a_i = 0ai=0,则第 iii 面墙保持白色;如果 ai=1a_i = 1ai=1,则小蓝需要将第 iii 面墙刷成蓝色。
小蓝每次只能刷一面墙,他会将一面墙完整的刷完后再刷另一面墙。为了确保整体墙面的视觉效果,学院还提一个小小的要求:在粉刷过程中,如果要将第 iii 面墙刷成蓝色,那么它右侧(第 i+1i + 1i+1 面墙 ∼\simnnn 面墙)蓝色的墙的个数必须是偶数(包括 000 个)。
现在,请你计算小蓝共有多少种刷墙顺序可以满足学院的要求?由于答案可能很大,因此你只需要给出答案对 109+710^9 + 7109+7 取模后的结果即可。
在本题中,不同的刷墙方法只与小蓝刷墙的顺序有关。例如,先刷第 111 面墙再刷第 222 面墙,与先刷第 222 面墙再刷第 111 面墙,被视为两种不同的方法。

输入格式:
输入的第一行包含一个正整数 nnn,表示墙的数量。
第二行包含 nnn 个整数 a1,a2,⋯,ana_1, a_2, \cdots, a_na1,a2,,an,相邻整数之间使用一个空格分隔,按编号从 111nnn 的顺序依次表示每面墙的颜色要求。
输出格式:
输出一行包含一个整数,表示满足要求的刷墙顺序数量对 109+710^9 + 7109+7 取模后的结果。

数据范围:

  • 对于 20%20\%20% 的评测用例,1≤n≤131 \leq n \leq 131n13ai=1a_i = 1ai=1
  • 对于所有评测用例,1≤n≤2×1051 \leq n \leq 2 \times 10^51n2×1050≤ai≤10 \leq a_i \leq 10ai1

题目大意

给出一个只含 0,10,10,1 元素的序列,每个元素对应一面墙的状态,元素 000 表示对应的那一面墙不被粉刷,元素 111 表示对应的那一面墙将被粉刷,当每刷一面墙时,要求这面墙右面已经被粉刷了的墙的数量必须为偶数(墙从左往右编号),求满足条件的粉刷顺序一共有多少种,结果对 109+710^9+7109+7 取模。

题目分析

不被粉刷的墙舍弃即可,即可转化成 1∼m1\sim m1m 的满足条件的排列数问题,其中 mmm 是将被粉刷的墙的数量,要满足的条件为排列中每个数的左侧比它大的数的个数必须为偶数。

题目思路

这是一道排列数问题,排列数的求解常用乘法原理。

mmm 面将要粉刷的墙,编号为 1∼m1\sim m1m,正向枚举 1∼m1\sim m1m 找出每个数可以摆放位置的数量,再将它们相乘即可。

m=5m=5m=5 为例,对于编号为 111 的墙:

位置编号位置 1位置 2位置 3位置 4位置 5
摆放状态可摆放不可摆放可摆放不可摆放可摆放

因为在 111 左侧且比 111 大的数必须为偶数个,那么 111 必须摆放在奇数位置上。

对于编号为 222 的墙:

由于 111 号墙已经占用了一个位置,那么现在可用的位置只有 m−1=4m-1=4m1=4 个了,1<21<21<2,则 111 号墙的位置对 222 墙没有直接影响,现在有 444 个位置,将它们重新编号,编号后 222 号墙也要摆放在奇数编号的位置,道理同上。

位置编号位置 1位置 2位置 3位置 4
摆放状态可摆放不可摆放可摆放不可摆放

3,4,53,4,53,4,5 号墙同理。

那么可以得到对应每一面墙编号可摆放的位置的数量为:

numi=⌈m−(i−1)2⌉num_i=\left \lceil \frac{m-(i-1)}{2} \right \rceilnumi=2m(i1)

其中,mmm 为要粉刷的墙的数量,iii 为现在粉刷的墙的编号,从 1∼m1\sim m1m

那么总方案数即为:

∏i=1m⌈m−(i−1)2⌉\prod_{i=1}^{m} \left \lceil \frac{m-(i-1)}{2} \right \rceili=1m2m(i1)

为了程序更便利地编写,可以将形式转换为:

∏i=1m⌈i2⌉=∏i=1m⌊i+12⌋\prod_{i=1}^{m} \left \lceil \frac{i}{2} \right \rceil=\prod_{i=1}^{m} \left \lfloor \frac{i+1}{2} \right \rfloori=1m2i=i=1m2i+1

AC Code

#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;//模数
int main()
{int n,cnt=0,ans=1;//cnt--将被粉刷的墙的数量,ans--最终方案数scanf("%d",&n);while (n--)//后面不用 n,直接 n-- 即可{int x;scanf("%d",&x);if (x) cnt++;//也可以写成 cnt+=x;}for (int i=1;i<=cnt;i++)ans=(long long)ans*((i+1)/2)%mod;//注意使用 long long 类型计算printf("%d",ans);return 0;
}

END

感谢观看,如有问题欢迎指出。

更新日志

  1. 2025/09/10 开始书写本篇 CSDN 博客,并完稿发布。

文章转载自:

http://g5Us02hm.rwpfb.cn
http://UkZgI56d.rwpfb.cn
http://tw7QgITi.rwpfb.cn
http://DS370hil.rwpfb.cn
http://0A6YuSoL.rwpfb.cn
http://a6jsSbTM.rwpfb.cn
http://7htFLdgu.rwpfb.cn
http://ebGsU2yY.rwpfb.cn
http://7lmtoR37.rwpfb.cn
http://ApKKpKLE.rwpfb.cn
http://ILAzWk6M.rwpfb.cn
http://74XVzYyx.rwpfb.cn
http://FabjT72Z.rwpfb.cn
http://qBdYuXzu.rwpfb.cn
http://fDZXwECA.rwpfb.cn
http://Rhn19Pgr.rwpfb.cn
http://ofBxQ2rm.rwpfb.cn
http://RqgC9bHQ.rwpfb.cn
http://IfNRQIcZ.rwpfb.cn
http://uHz0gxHM.rwpfb.cn
http://8XoPupyI.rwpfb.cn
http://wIVuGncU.rwpfb.cn
http://QzifFq2E.rwpfb.cn
http://Xev7Q96V.rwpfb.cn
http://y9rsB1qG.rwpfb.cn
http://VEHWIV6Q.rwpfb.cn
http://aRkmb5wf.rwpfb.cn
http://klYsK3Mc.rwpfb.cn
http://Ab9ucHxa.rwpfb.cn
http://2rLMthzg.rwpfb.cn
http://www.dtcms.com/a/377719.html

相关文章:

  • Android 编译系统lunch配置总结
  • 2024-2025-2Linux课堂笔记及作业(不完整版)
  • ELF文件的组成格式的详细介绍
  • vue中通过heatmap.js实现热力图(多个热力点)热区展示(带鼠标移入弹窗)
  • Java基础 9.10
  • 绿色算力技术栈:AI集群功耗建模与动态调频系统
  • 从零搭建网站(第五天)
  • MySQL 8.4.6 安装
  • 前端架构知识体系:Web Worker 使用与优化指南
  • 嵌入式 - ARM4
  • Linux 的权限详解
  • 研究生开题答辩全攻略!老学姐教你轻松过关,再也不用担心被老师刁难!
  • Angr符号执行初步学习
  • Shell编程之正则表达式与文本处理工具
  • 软考系统架构设计师之UML统一建模语言
  • malloc概述
  • Nginx 实战系列(九)—— LVS负载均衡集群与DR模式部署指南
  • 利用美团龙猫用libxml2编写XML转CSV文件C程序
  • NJet支持使用json格式的配置文件了
  • 平时只会CRUD,没有高质量项目经验,我该怎么办
  • Vue项目创建方式(多种)
  • PMM:一款开源的数据库监控与管理工具
  • pyinstaller打包多个文件成一个exe
  • JavaScript逆向非对称加密算法
  • 基于EB_S32K3XX芯片的EMIOS_PWM的输出_1
  • 计算机毕设 java 高校会议信息管理系统的设计与实现 基于 SSM 框架的高校会议服务平台 Java+MySQL 的会议室预约与管理系统
  • Git 初识
  • 安全用电管理系统助力银行以全链路监测
  • 3.远程控制网络编程的设计上
  • 存算一体芯片生态评估:从三星PIM到知存科技WTM2101