洛谷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 Sl?1?=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 Sl?1?=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?=Si?1? 的位置 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?=Si?1?,則會對 g ( S ) g(S) g(S) 產生額外的貢獻。對于每個位置 i i i S i ? 1 S_{i-1} Si?1? S i S_i Si? 可以是 0110,其余 ∣ S ∣ ? 2 |S| - 2 S?2 個位置可以任意排列。因此,每個位置 i i i 的貢獻為:
    2 × ( n + m ? 2 n ? 1 ) 2 \times \binom{n + m - 2}{n - 1} 2×(n?1n+m?2?)
    由于總共有 n + m ? 1 n + m - 1 n+m?1 個可能的位置 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+m?1)×2×(n?1n+m?2?)

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+m?1)×2×(n?1n+m?2?)

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.pswp.cn/news/894527.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894527.shtml
英文地址,請注明出處:http://en.pswp.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. 代碼示例…