hdu2065"红色病毒"问题(指数母函数+快速幂取模)
"红色病毒"问题
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9329 Accepted Submission(s): 3816
现在有一长度为N的字符串,满足一下条件:
(1) 字符串仅由A,B,C,D四个字母组成;
(2) A出现偶数次(也可以不出现);
(3) C出现偶数次(也可以不出现);
计算满足条件的字符串个数.
当N=2时,所有满足条件的字符串有如下6个:BB,BD,DB,DD,AA,CC.
由于这个数据肯能非常庞大,你只要给出最后两位数字即可.
用母函数来做
A:(1 + x^2/1! + x^4/2! + ….);
B:(1 + x/1! + x^2/2! + x^3/3! + …);
C:(1 + x^2/1! + x^4/2! + ….);
D:(1 + x/1! + x^2/2! + x^3/3! + …);
可以得到
G(x) = (1 + x^2/1! + x^4/2! + ….)2 * (1 + x/1! + x^2/2! + x^3/3! + …)2;
由泰勒展开式
ex = 1 + x/1! + x^2/2! + x^3/3! + …
e-x = 1 - x/1! + x^2/2! - x^3/3! + …
得到
G(x) = e^2x + ((e^x + e^-x)/2)2;
= (1/4) * (^e2x + 1)2
= (1/4) * (e^4x + 2*e^2x + 1);
又因为:
e4x = 1 + (4x)/1! + (4x)^2/2! + (4x)^3/3! + … + (4x)^n/n!;
e2x = 1 + (2x)/1! + (2x)^2/2! + (2x)^3/3! + … + (2x)^n/n!;
所以:
n次幂的排列数为 (1/4)(4^n + 2*2^n)
化简为(4^(n-1)+2^(n-1))%100
因为数据比较大,所以要用到快速幂取模
#include<bits/stdc++.h>
using namespace std;
long long mod_exp(long long a, long long b, long long c) //快速幂取余a^b%c
{
long long res, t;
res = % c;
t = a % c;
while (b)
{
if (b & )
{
res = res * t % c;
}
t = t * t % c;
b >>= ;
}
return res;
}
int main()
{
int t;
while(~scanf("%d",&t),t)
{
int cases=;
while(t--)
{ cases++;
long long n;scanf("%lld",&n);
long long ans=(mod_exp(,n-,)+mod_exp(,n-,))%;
printf("Case %d: %lld\n",cases,ans); }
printf("\n");
}
return ;
}
https://blog.csdn.net/weixin_39778570/article/details/82256128
hdu2065"红色病毒"问题(指数母函数+快速幂取模)的更多相关文章
- 【转】C语言快速幂取模算法小结
(转自:http://www.jb51.net/article/54947.htm) 本文实例汇总了C语言实现的快速幂取模算法,是比较常见的算法.分享给大家供大家参考之用.具体如下: 首先,所谓的快速 ...
- HDU 1061 Rightmost Digit --- 快速幂取模
HDU 1061 题目大意:给定数字n(1<=n<=1,000,000,000),求n^n%10的结果 解题思路:首先n可以很大,直接累积n^n再求模肯定是不可取的, 因为会超出数据范围, ...
- UVa 11582 (快速幂取模) Colossal Fibonacci Numbers!
题意: 斐波那契数列f(0) = 0, f(1) = 1, f(n+2) = f(n+1) + f(n) (n ≥ 0) 输入a.b.n,求f(ab)%n 分析: 构造一个新数列F(i) = f(i) ...
- POJ3641-Pseudoprime numbers(快速幂取模)
题目大意 判断一个数是否是伪素数 题解 赤果果的快速幂取模.... 代码: #include<iostream> #include<cmath> using namespace ...
- 九度OJ 1085 求root(N, k) -- 二分求幂及快速幂取模
题目地址:http://ac.jobdu.com/problem.php?pid=1085 题目描述: N<k时,root(N,k) = N,否则,root(N,k) = root(N',k). ...
- HDU--杭电--4506--小明系列故事——师兄帮帮忙--快速幂取模
小明系列故事——师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) To ...
- CodeForces Round #191 (327C) - Magic Five 等比数列求和的快速幂取模
很久以前做过此类问题..就因为太久了..这题想了很久想不出..卡在推出等比的求和公式,有除法运算,无法快速幂取模... 看到了 http://blog.csdn.net/yangshuolll/art ...
- HDU1013,1163 ,2035九余数定理 快速幂取模
1.HDU1013求一个positive integer的digital root,即不停的求数位和,直到数位和为一位数即为数根. 一开始,以为integer嘛,指整型就行吧= =(too young ...
- Powmod快速幂取模
快速幂取模算法详解 1.大数模幂运算的缺陷: 快速幂取模算法的引入是从大数的小数取模的朴素算法的局限性所提出的,在朴素的方法中我们计算一个数比如5^1003%31是非常消耗我们的计算资源的,在整个计算 ...
随机推荐
- Python 多线程 线程安全、daemon简介 (四)
线程安全 只能在Winodws下的ipython中演示,Python命令行.Pycharm.Mac下的ipython都演示不出效果 import threading def worker(): for ...
- vlc-android native调试配置
1, 按照官网给出的链接,git clone代码,配置好android sdk,ndk...后运行compile.sh; 2, 出现一个protobuf相关的问题(貌似要求protobuf3),自己去 ...
- 奇妙的CSS3—导航栏下划线跟随效果
先来看一下效果: 1.基本效果就是这样的 ,鼠标悬停,下划线划入.鼠标离开,下划线划出 2.下划线的划入是有方向的,从左侧划入悬停,下划线由左向右伸长.从右侧划入,下划线由又往左伸长 实现思路 1.导 ...
- #leetcode刷题之路22-括号生成
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为:[ "((()))", "(()())&q ...
- 今天差点被断电搞死了,幸好IDE的备份救了我
今天早上,刚好改了几个PAS的源代码,在按CTRL+SHIFT+S(保存全部) 时,突然断电.有电后,发现这些保存的文件都变成乱码了............. DFM,PAS都是这样,幸好DELPHI ...
- 飞控入门之C语言结构体、枚举
结构体 先来说明一下,结构体存在的意义.比如说有一只猫,要在C语言程序中综合描述它,那么可以这样说,它的体重是float类型的,颜色是char类型的,它的一些食物名字是一个数组,那么如果分开定义这些变 ...
- Home Assistant系列 -- 基于树莓派安装并设置自启动
Home Assistant 是当前智能家居最火热的开源DIY 软件,之前的文章 智能家居系统 Home Assistant 系列 --介绍篇 已经详细介绍过了,这里就不详细介绍了,今天介绍 如何 ...
- 基于STM32的简易磁卡充值系统
使用的是MFRC522射频模块,把磁卡放入感应区后,可以执行三种操作: 初始化磁卡金额 读取卡内金额 向卡内写入金额(充值) 本来想着回学校了能把洗浴卡的金额给改掉,实现帝皇般的尊贵洗浴享受(不花钱… ...
- Titanic幸存预测分析(Kaggle)
分享一篇kaggle入门级案例,泰坦尼克号幸存遇难分析. 参考文章: 技术世界,原文链接 http://www.jasongj.com/ml/classification/ 案例分析内容: 通过训练集 ...
- Java基础——枚举
一.使用枚举类之前是如何实现枚举的 在JDK1.5之前,我们定义常量都是:public static fianl....:定义枚举也可以通过如下的方式: package com.jiangbei.t ...