*寒假水50——"红色病毒"问题【不懂】

本文介绍了一个计算特定字符串组合数量的问题,给出了一个C++实现的解决方案,并通过样例输入输出展示了程序的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色病毒",经研究发现,该病毒及其变种的DNA的一条单链中,胞嘧啶,腺嘧啶均是成对出现的。 
现在有一长度为N的字符串,满足一下条件: 
(1) 字符串仅由A,B,C,D四个字母组成; 
(2) A出现偶数次(也可以不出现); 
(3) C出现偶数次(也可以不出现); 
计算满足条件的字符串个数. 
当N=2时,所有满足条件的字符串有如下6个:BB,BD,DB,DD,AA,CC. 
由于这个数据肯能非常庞大,你只要给出最后两位数字即可. 

Input每组输入的第一行是一个整数T,表示测试实例的个数,下面是T行数据,每行一个整数N(1<=N<2^64),当T=0时结束. 
Output对于每个测试实例,输出字符串个数的最后两位,每组输出后跟一个空行.Sample Input

4
1
4
20
11
3
14
24
6
0

Sample Output

Case 1: 2
Case 2: 72
Case 3: 32
Case 4: 0

Case 1: 56
Case 2: 72
Case 3: 56

 

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long ll;

const int mod = 100;

ll T, n, ans[100], cas;

void init()
{
    ll a1 = 1, a2 = 1;
    for (int i = 1; i <= 24; i++)
    {
        if (i != 1)
            a1 = (a1 * 2) % mod, a2 = (a2 * 4) % mod;
        ans[i] = (a1 + a2) % 100;
    }
}

int main()
{
    init();
    while (scanf("%lld", &T) && T)
    {
        cas = 0;
        while (T--)
        {
            ++cas;
            scanf("%lld", &n);
            if (n >= 4)
            {
                n %= 20;
                if (n < 4)
                    n += 20;
            }
            printf("Case %lld: %lld\n", cas,ans[n]);
        }
        printf("\n");
    }

    return 0;
}

题解:母函数?泰勒展开式?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值