包含 A 個 1,B 個 10 和 C 個 0 的字串中,每個 1 的“10”子序列之和的計數


本文旨在實現一個程式,用於獲取包含 A 個 1,B 個 10 和 C 個 0 的字串中,每個 1 的“10”子序列之和的計數。

示例

Let us take the Input: A = 1, B = 2, C = 3
Output obtained here is : 14

解釋

A = 1 表示有一個“1”字串,B = 2 表示有一對“10”字串,C = 3 表示有一組三個“0”字串。

連線後得到的字串為“11010000”。

因此,對於第一個“1”,有五個“10”子序列是可能的;對於第二個“1”,有五個“10”子序列是可能的;對於第三個“1”,有四個“10”子序列是可能的。

因此,總共有 5 + 5 + 4 = 14 個可能的序列。

示例

Let us take the Input: A = 2, B = 1, C =0
Output obtained here is: 3

解釋

A = 2 表示有兩個“1”字串,B = 1 表示有一個“10”字串,C = 0 表示沒有“0”字串。

連線後得到的字串為“1110”。

因此,可能的潛在子序列 = 3。

示例

Let us take the Input: A = 4, B = 1, C =1
Output obtained here is : 10

解釋

A = 4 表示有四個“1”字串,B = 1 表示有一個“10”字串,C = 1 表示有一個“0”字串。

連線後得到的字串為“1111100”。

因此,可能的潛在子序列 = 10。

示例

Let us take the Input: A = 0, B = 2, C =3
Output obtained here is: 9

解釋

A = 0 表示沒有“1”字串,B = 2 表示有一對“10”字串,C = 3 表示有三個“0”字串。

連線後得到的字串為“1010000”。

因此,可能的潛在子序列 = 9。

問題陳述

實現一個程式,用於獲取包含 A 個 1,B 個 10 和 C 個 0 的字串中,每個 1 的“10”子序列之和的計數。

方法

將所有“1”附加到最終字串的開頭,並將所有“0”附加到最終字串的末尾,以獲得最大子序列。

宣告一個名為 res 的變數,然後將 A 乘以“1”和 B 乘以“10”來儲存潛在“10”子序列的計數。

透過將 (A*B)*C 乘以“0”以及 A 和 B 乘以“1”,新增至少包含“10”個子序列的計數結果。

返回結果的模。

演算法

下面給出獲取包含 A 個 1,B 個 10 和 C 個 0 的字串中,每個 1 的“10”子序列之和的計數的演算法:

  • 步驟 1 - 定義一個函式來獲取和的計數。

  • 步驟 2 - 因為結果可能非常大,所以計算其模 109 + 7。

  • 步驟 3 - 使用以下公式計算可能的子序列:res = (A * 1ll * B) % mod + ((B * 1ll * (B + 1)) / 2) % mod;

  • 步驟 4 - 檢查 res 是否大於或等於 mod,如果是,則從 res 中減去 mod。

  • 步驟 5 - 使用以下公式計算可能的子序列:res += ((A + B) * 1ll * C) % mod;

  • 步驟 6 - 再次檢查 res 是否大於或等於 mod,如果是,則從 res 中減去 mod。

  • 步驟 7 - 列印輸出。

示例(C 程式)

這是上述演算法的 C 程式實現,用於獲取包含 A 個 1,B 個 10 和 C 個 0 的字串中,每個 1 的“10”子序列之和的計數。

#include <stdio.h>
long long maximumSubSeq(int A, int B, int C) {
   long long mod = 1000000007;
   long long res = (A * 1ll * B) % mod + ((B * 1ll * (B + 1)) / 2) % mod;
   if (res >= mod) {
      res -= mod;
   }
   res += ((A + B) * 1ll * C) % mod;
   if (res >= mod) {
      res -= mod;
   }
   return res;
}
int main(){
   int A = 2, B = 1, C = 0;
   printf("%lld
", maximumSubSeq(A, B, C)); return 0; }

輸出

執行後,將生成以下輸出:

3

結論

同樣,我們可以獲取包含 A 個 1,B 個 10 和 C 個 0 的字串中,每個 1 的“10”子序列之和的計數。本文解決了獲取包含 A 個 1,B 個 10 和 C 個 0 的字串中,每個 1 的“10”子序列之和的計數的程式的挑戰。

這裡提供了 C 程式設計程式碼以及獲取包含 A 個 1,B 個 10 和 C 個 0 的字串中,每個 1 的“10”子序列之和的計數的程式的演算法和方法。

更新於: 2023年10月31日

144 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.