包含 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”子序列之和的计数的程序的算法和方法。