包含 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 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告