洛谷P11655「FAOI-R5」Lovely 139

P11655「FAOI-R5」Lovely 139

题目背景

Update:数据有 0 0,答案为 1,请选手特判以正常通过。

Height ≤ 139 \text{Height}\leq139 Height139

题目描述

对于一个 01 \tt 01 01 S S S(下标从 1 1 1 开始),我们定义它的一个区间 [ l , r ] [l,r] [l,r]极长颜色段,当且仅当它同时满足以下条件:

  • 如果 l ≠ 1 l\neq 1 l=1 S l − 1 ≠ S l S_{l-1}\neq S_l Sl1=Sl
  • 如果 r ≠ ∣ S ∣ r\neq \lvert S\rvert r=S S r + 1 ≠ S r S_{r+1}\neq S_r Sr+1=Sr
  • ∀ i ∈ [ l , r ) , S i = S i + 1 \forall i\in[l,r),S_i=S_{i+1} i[l,r),Si=Si+1

定义 g ( S ) g(S) g(S) S S S不同极长颜色段数。比如 g ( g( g( 00 \tt00 00 ) = 1 )=1 )=1 g ( g( g( 1110 \tt1110 1110 ) = 2 )=2 )=2 g ( g( g( 001011 \tt001011 001011 ) = 4 )=4 )=4

定义 f ( n , m ) f(n,m) f(n,m) 的值为所有恰好包含 n \boldsymbol n n 0 \tt 0 0 m \boldsymbol m m 1 \tt 1 1 01 \tt 01 01 S S S g ( S ) g(S) g(S) 之和。

你需要回答 T T T 个问题,每次给出 n , m n,m n,m 的值,求 f ( n , m ) f(n,m) f(n,m) 的值对 1 0 9 + 7 10^9+7 109+7 取模后的结果。

输入格式

第一行输入一个正整数数 T T T,表示问题个数。

接下来 T T T 行,每行两个非负整数 n , m n,m n,m,表示问题的参数。

输出格式

输出 T T T 行,每行为对应问题的答案。

样例 #1

样例输入 #1

3
2 2
4 6
7 8

样例输出 #1

18
1218
54483

样例 #2

样例输入 #2

3
845 826
672 826
618 925

样例输出 #2

789284214
588160420
730993180

样例 #3

样例输入 #3

1
1 46

样例输出 #3

139

提示

样例 1 解释

对于第一组数据 n = 2 , m = 2 n=2,m=2 n=2,m=2,一共有六个本质不同的 S S S,答案为 g ( g( g( 0011 \tt0011 0011 ) + g ( )+g( )+g( 0101 \tt0101 0101 ) + g ( )+g( )+g( 0110 \tt0110 0110 ) + g ( )+g( )+g( 1001 \tt1001 1001 ) + g ( )+g( )+g( 1010 \tt1010 1010 ) + g ( )+g( )+g( 1100 \tt1100 1100 ) = 2 + 4 + 3 + 3 + 4 + 2 = 18 )=2+4+3+3+4+2=18 )=2+4+3+3+4+2=18

数据规模与约定

本题采用捆绑测试

  • Subtask 1(15 pts): 0 ≤ n + m ≤ 20 0 \le n+m \le 20 0n+m20 1 ≤ T ≤ 10 1 \le T \le 10 1T10
  • Subtask 2(25 pts): 0 ≤ n + m ≤ 4 × 1 0 3 0 \le n+m \le 4 \times 10^3 0n+m4×103
  • Subtask 3(20 pts): 1 ≤ T ≤ 10 1 \le T \le 10 1T10
  • Subtask 4(40 pts):无特殊限制。

对于所有数据,保证 1 ≤ T ≤ 1 0 6 1 \leq T \leq 10^6 1T106 0 ≤ n + m ≤ 2 × 1 0 6 0 \leq n+m\leq 2 \times 10^6 0n+m2×106 0 ≤ n , m ≤ 2 × 1 0 6 0\le n,m\le 2\times10^6 0n,m2×106

题解思路

问题描述

给定一个包含 n n n0 和 $m101` 串 S S S,定义 g ( S ) g(S) g(S) S S S 的不同极长颜色段数。极长颜色段 [ l , r ] [l, r] [l,r] 需要满足以下条件:

  1. 如果 l ≠ 1 l \neq 1 l=1,则 S l − 1 ≠ S l S_{l-1} \neq S_l Sl1=Sl
  2. 如果 r ≠ ∣ S ∣ r \neq |S| r=S,则 S r + 1 ≠ S r S_{r+1} \neq S_r Sr+1=Sr
  3. 对于所有 i ∈ [ l , r ) i \in [l, r) i[l,r) S i = S i + 1 S_i = S_{i+1} Si=Si+1

定义 f ( n , m ) f(n, m) f(n,m) 为所有满足条件的 01 S S S g ( S ) g(S) g(S) 之和,需要对 1 0 9 + 7 10^9 + 7 109+7 取模。

解题思路

1. 计算 g ( S ) g(S) g(S) 的贡献

对于任意一个 01 S S S g ( S ) g(S) g(S) 可以通过以下方式计算:

  • g ( S ) g(S) g(S) 等于 S S S 中满足 S i ≠ S i − 1 S_i \neq S_{i-1} Si=Si1 的位置 i i i 的数量,再加上 1 1 1

2. 贡献分解

f ( n , m ) f(n, m) f(n,m) 的贡献分解为两部分:

  1. 基础的贡献:每个 01 S S S 的基础贡献为 1 1 1,因为 g ( S ) g(S) g(S) 至少包含一个极长颜色段。总共有 ( n + m n ) \binom{n + m}{n} (nn+m)01 串,因此这部分的总贡献为:
    ( n + m n ) \binom{n + m}{n} (nn+m)
  2. 变化的贡献:对于每个位置 i i i,如果 S i ≠ S i − 1 S_i \neq S_{i-1} Si=Si1,则会对 g ( S ) g(S) g(S) 产生额外的贡献。对于每个位置 i i i S i − 1 S_{i-1} Si1 S i S_i Si 可以是 0110,其余 ∣ S ∣ − 2 |S| - 2 S2 个位置可以任意排列。因此,每个位置 i i i 的贡献为:
    2 × ( n + m − 2 n − 1 ) 2 \times \binom{n + m - 2}{n - 1} 2×(n1n+m2)
    由于总共有 n + m − 1 n + m - 1 n+m1 个可能的位置 i i i,因此这部分的总贡献为:
    ( n + m − 1 ) × 2 × ( n + m − 2 n − 1 ) (n + m - 1) \times 2 \times \binom{n + m - 2}{n - 1} (n+m1)×2×(n1n+m2)

3. 总贡献

将两部分贡献相加,得到 f ( n , m ) f(n, m) f(n,m) 的表达式:
f ( n , m ) = ( n + m n ) + ( n + m − 1 ) × 2 × ( n + m − 2 n − 1 ) f(n, m) = \binom{n + m}{n} + (n + m - 1) \times 2 \times \binom{n + m - 2}{n - 1} f(n,m)=(nn+m)+(n+m1)×2×(n1n+m2)

4. 模运算

由于结果需要对 1 0 9 + 7 10^9 + 7 109+7 取模,因此在计算组合数时需要使用模运算和预处理阶乘及其逆元来高效计算组合数。

总结

通过将 f ( n , m ) f(n, m) f(n,m) 的贡献分解为基础贡献和变化贡献,并利用组合数学的知识,可以高效地计算出 f ( n , m ) f(n, m) f(n,m) 的值。最终的结果需要对 1 0 9 + 7 10^9 + 7 109+7 取模,以确保结果的正确性。

代码:

#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define pb push_back
#define pii pair<int, int>
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
#define FU(i, a, b) for (int i = (a); i <= (b); ++i)
#define FD(i, a, b) for (int i = (a); i >= (b); --i)
using namespace std;const int MAX = 2000000 + 10; // 2e6 + 10
long long fact[MAX], inv_fact[MAX];long long qpow(long long a, long long b) { // 快速幂long long res = 1;while (b > 0) {if (b & 1)res = res * a % MOD;a = a * a % MOD;b >>= 1;}return res;
}void precompute() { // 预处理阶乘和阶乘逆元fact[0] = 1;for (int i = 1; i < MAX; ++i) {fact[i] = fact[i - 1] * i % MOD;}inv_fact[MAX - 1] = qpow(fact[MAX - 1], MOD - 2);for (int i = MAX - 2; i >= 0; --i) {inv_fact[i] = inv_fact[i + 1] * (i + 1) % MOD;}
}long long comb(int a, int b) { // 计算组合数if (b < 0 || b > a)return 0;return fact[a] * inv_fact[b] % MOD * inv_fact[a - b] % MOD;
}void solve() {int n, m;cin >> n >> m;if (n == 0 || m == 0) {printf("1\n");return;}int a = n + m;int term1 = (a - 1) * 2 % MOD;term1 = term1 * comb(a - 2, n - 1) % MOD;int term2 = comb(a, n) % MOD;int ans = (term1 + term2) % MOD;cout << ans << endl;
}signed main() {cin.tie(0)->ios::sync_with_stdio(0);precompute();int T = 1;cin >> T;while (T--) {solve();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】24.进程信号(1)

文章目录 1. 信号入门1.1 进程与信号的相关知识1.2 技术应用角度的信号1.3 注意1.4 信号概念1.5 信号处理常见方式概览 2. 产生信号2.1 通过终端按键产生信号2.2 调用系统函数向进程发信号2.3 由软件条件产生信号2.4 硬件异常产生信号2.5 信号保存 3. 阻塞信号3.1 信号其他相关…

《手札·开源篇》从开源到商业化:中小企业的低成本数字化转型路径 ——以Odoo为数据中台低成本实现售前售中一体化

某机电设备有限公司数字化转型案例&#xff1a;以Odoo为数据中台实现售前售中一体化 一、企业背景某机电设备有限公司在机电设备领域历经多年发展&#xff0c;业务广泛&#xff0c;涵盖工业自动化设备、电力设备等产品的销售与服务。随着业务版图不断拓展&#xff0c;企业面临…

笔试-业务逻辑4

应用 小明在玩一个数字加减游戏&#xff0c;输入4个正整数&#xff1a;s、t、a、b&#xff0c;其中s>1&#xff0c;b<105&#xff0c;a!b。只使用加法或者减法&#xff0c;使得st。 每回合&#xff0c;小明用当前的数字&#xff0c;加上或减去一个数字&#xff1b;目前有…

Windows 中的 WSL:开启你的 Linux 之旅

今天在安装windows上安装Docker Desktop的时候&#xff0c;遇到了WSL。下面咱们就学习下。 欢迎来到涛涛聊AI 一、什么是 WSL&#xff1f; WSL&#xff0c;全称为 Windows Subsystem for Linux&#xff0c;是微软为 Windows 系统开发的一个兼容层&#xff0c;它允许用户在 Win…

编程题-电话号码的字母组合(中等)

题目&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 解法一&#xff08;哈希表动态添加&#xff09;&#x…

python:如何播放 .spx 声音文件

.spx 是 Speex音频编解码器的文件扩展名&#xff0c;它是一种开源的、免费的音频编解码器&#xff0c;主要用于语音压缩和语音通信领域。spx 文件通常用于语音记录、VoIP应用、语音信箱等场景。 .mp3 是一种广泛使用的音频格式&#xff0c;它采用了有损压缩算法&#xff0c;可…

数据结构课程设计(三)构建决策树

3 决策树 3.1 需求规格说明 【问题描述】 ID3算法是一种贪心算法&#xff0c;用来构造决策树。ID3算法起源于概念学习系统&#xff08;CLS&#xff09;&#xff0c;以信息熵的下降速度为选取测试属性的标准&#xff0c;即在每个节点选取还尚未被用来划分的具有最高信息增益的…

Vue3学习笔记-事件-4

一、事件处理 使用v-on或者后面加事件&#xff1a; <template><button v-on:click"addCount()">{{count}}</button> </template> 二、事件传参 传event&#xff1a; 不传参时&#xff0c;默认自动接收 event 传自定义参数时&#xff0c…

Node.js下载安装及环境配置

目录 一、下载 1. 查看电脑版本&#xff0c;下载对应的安装包 2. 下载路径下载 | Node.js 中文网 二、安装步骤 1. 双击安装包 2. 点击Next下一步 3. 选择安装路径 4. 这里我选择默认配置&#xff0c;继续Next下一步&#xff08;大家按需选择&#xff09; 5. 最后inst…

k8s二进制集群之ETCD集群证书生成

安装cfssl工具配置CA证书请求文件创建CA证书创建CA证书策略配置etcd证书请求文件生成etcd证书 继续上一篇文章《负载均衡器高可用部署》下面介绍一下etcd证书生成配置。其中涉及到的ip地址和证书基本信息请替换成你自己的信息。 安装cfssl工具 下载cfssl安装包 https://github…

使用python实现与本地ollama部署的deepseek对话

专栏总目录 按照ollama官方doc的example操作&#xff0c;没有成功与本地ollama上的deepseek-r1:1.5b通讯后&#xff0c;发现vscode可以调用本地ollama上的deepseek模型。 为了实现与ollama上的deepseek模型通讯&#xff0c;我使用wireshark对本地回环地址进行侦听后&#xff0c…

【大模型理论篇】最近大火的DeepSeek-R1初探系列1

1. 背景介绍 这一整个春节&#xff0c;被DeepSeek-R1刷屏。各种铺天盖地的新闻以及老板发的相关信息&#xff0c;着实感受到DeepSeek-R1在国外出圈的震撼。 DeepSeek推出了新的推理模型&#xff1a;DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是一个在没有经过监督微调…

C++哈希表深度解析:从原理到实现,全面掌握高效键值对存储

目录 一、核心组件与原理 1. 哈希函数&#xff08;Hash Function&#xff09; 2. 冲突解决&#xff08;Collision Resolution&#xff09; 3. 负载因子&#xff08;Load Factor&#xff09;与扩容 二、C实现&#xff1a;std::unordered_map 1. 模板参数 2. 关键操作与复…

Pandoc, Zotero, JabRef 管理论文引用,生成参考文献 | 撰写论文 paper

书接上回&#xff0c;使用 Obsidian, Zotero, JabRef, Pandoc, Markup-Markdown | 撰写论文 paper 管理论文引用&#xff0c;生成参考文献 TL; DR导出 bibliography 文件JabRefZotero 参考文献引用语法reference-docLinks TL; DR 安装 pandoc v3.6.2. 使用一下命令&#xff0c…

为AI聊天工具添加一个知识系统 之85 详细设计之26 批流一体式 与数据提取器

Q843、批流一体式 统一数据处理框架 "批流一体式统一数据处理框架" 这一概念通常指的是一种将批处理&#xff08;Batch Processing&#xff09;和流处理&#xff08;Stream Processing&#xff09;结合在一起的数据处理架构。它的目标是提供一个统一的框架&#xff…

深入理解 `box-sizing: border-box;`:CSS 布局的利器

深入理解 box-sizing: border-box;&#xff1a;CSS 布局的利器 默认行为示例代码 使用 box-sizing: border-box;示例代码 全局应用 box-sizing: border-box;示例代码 实际应用场景1. 表单布局2. 网格布局 总结 在 CSS 中&#xff0c;box-sizing 属性决定了元素的总宽度和高度是…

CSDN原力值提升秘籍:解锁社区活跃新姿势

在 CSDN 这个技术交流的大舞台上&#xff0c;原力值不仅是个人活跃度的象征&#xff0c;更是开启更多权益与福利的钥匙。最近&#xff0c;我出于自身需求&#xff0c;一头扎进了提升原力值的研究中&#xff0c;经过多方探索与资料整理&#xff0c;现在就迫不及待地把这些干货分…

计算机网络——流量控制

流量控制的基本方法是确保发送方不会以超过接收方处理能力的速度发送数据包。 通常的做法是接收方会向发送方提供某种反馈&#xff0c;如&#xff1a; &#xff08;1&#xff09;停止&等待 在任何时候只有一个数据包在传输&#xff0c;发送方发送一个数据包&#xff0c;…

2024美团春招硬件开发笔试真题及答案解析

目录 一、选择题 1、在 Linux,有一个名为 file 的文件,内容如下所示: 2、在 Linux 中,关于虚拟内存相关的说法正确的是() 3、AT89S52单片机中,在外部中断响应的期间,中断请求标志位查询占用了()。 4、下列关于8051单片机的结构与功能,说法不正确的是()? 5、…

【C语言入门】解锁核心关键字的终极奥秘与实战应用(三)

目录 一、auto 1.1. 作用 1.2. 特性 1.3. 代码示例 二、register 2.1. 作用 2.2. 特性 2.3. 代码示例 三、static 3.1. 修饰局部变量 3.2. 修饰全局变量 3.3. 修饰函数 四、extern 4.1. 作用 4.2. 特性 4.3. 代码示例 五、volatile 5.1. 作用 5.2. 代码示例…