Karen与测试 奇迹淫巧+快速幂
看到这题的复杂度就大概可以知道只是一道规律题了。
但问题是,规律是什么?
我们观察一下题目,不可能去模拟所有情况是吧,我们又发现所有想都是由上一层的数推过来的,于是我们可以把结果用最开始的给出项的系数直接算出来。
但问题又来了,n不同时,各项的系数怎么算呢?
于是我们开始找规律:
(下面的来自别人的博客)
n=4*k+1的时候,系数都是a1,0,a2,0,a3……a3,0,a2,0,a1的类型。
这是因为由一个固定的n=5的三角形(1,0,2,0,1)变化过来。
而且从加开始或从减开始都是一样的。
偶数位零是没用的,所以减法和加法也就是一样的(-0=+0)。
n=9时
1 | 0 | 4 | 0 | 6 | 0 | 4 | 0 | 1 |
---|---|---|---|---|---|---|---|---|
1 | 0 | 2 | 0 | 1 | ||||
1 | 0 | 2 | 0 | 1 | ||||
1 | 0 | 2 | 0 | 1 | ||||
1 | 0 | 2 | 0 | 1 |
把n暴力变成4*k+1的形式。O(4N)
而且这个系数除去0,跟杨辉三角的第2*(k/2)+1行是一模一样的。
杨辉三角:
1
11
121
1331
14641
……
快速幂……O(4N+N log mod)
代码(不是我的代码,我写的注释):
#include<cstdio>
#include<cstring>
#include<algorithm>#define imin(a,b) ((a<b)?(a):(b))
#define imax(a,b) ((a>b)?(a):(b))using namespace std;typedef long long ll;const ll mods=1e9+7;
const int N=200100;
int n,col;
int d[N];
ll f[2][N],ans;//f模拟最开始最多4次运算,因为只和上一行有关系,所以只保存两行ll Pow(ll x,ll y)
{ll s=1ll;for(;y;y>>=1){if(y&1) s=(s*x)%mods;x=(x*x)%mods;}return s;
}int main()
{scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&d[i]),f[1][i]=d[i];col=0; int o=1;//o是当前行,col是下一行while((n%4)!=1)//把n转换到4×k+1上去{o=o^1;for(int i=1;i<n;i++){col^=1;if(col) f[o][i]=((f[o^1][i]+f[o^1][i+1])%mods+mods)%mods;else f[o][i]=((f[o^1][i]-f[o^1][i+1])%mods+mods)%mods;}n--;}ll yi=(n-1)>>1;ll C=1;for(int i=0;i<=yi;i++)//枚举这一行不为零的系数{if(i) C=(C*(yi-i+1))%mods*Pow(i,mods-2)%mods;//系数ans=(ans+C*f[o][i<<1|1]%mods)%mods;}printf("%lld\n",ans);return 0;
}
转载于:https://www.cnblogs.com/gshdyjz/p/7674393.html
Karen与测试 奇迹淫巧+快速幂相关推荐
- C/C++:计算N的N次方的个位数(巧用快速幂与模运算性质)
题目描述(源自杭电OJ): 相关数学知识一:取模运算的性质 a乘b的结果对p取模等于a对p取模的结果乘b对p取模的结果再整体取模于p,详见下图 证明过程如下: 相关数学知识二:快速幂运算 以求a的b ...
- [CSP-S模拟测试]:涂色游戏(DP+组合数+矩阵快速幂)
题目描述 小$A$和小$B$在做游戏. 他们找到了一个$n$行$m$列呈网格状的画板.小$A$拿出了$p$支不同颜色的画笔,开始在上面涂色.看到小$A$涂好的画板,小$B$觉得颜色太单调了,于是把画板 ...
- 记一次使用快速幂与Miller-Rabin的大素数生成算法
大家都知道RSA的加密的安全性就是能够找到一个合适的大素数,而现在判断大素数的办法有许多,比如Fermat素性测试或者Miller-Rabin素性测试,而这里我用了Miller-Rabin素性测试的算 ...
- Applese 涂颜色(欧拉定理降幂+快速幂)
链接:https://ac.nowcoder.com/acm/contest/330/E 来源:牛客网 精通程序设计的 Applese 叕写了一个游戏. 在这个游戏中,有一个 n 行 m 列的方阵.现 ...
- 43行代码AC_HDU-2604 Queuing(矩阵快速幂,附详细的知识讲解、模板例题)
一道经典的矩阵快速幂模板题. 传送门1-->快速幂基本思想 传送门2-->矩阵快速幂讲解(教主传授) 传送门3.1-->HDU-1575(经典矩阵快速幂模板题1) 传送门3.2--& ...
- What day is that day?(快速幂,打表找周期,或者求通项公式)
有些题怎么都解不出来,这时候可以打表,找规律,求通项公式等,这些方法让人拍手叫绝,真不错-- Description It's Saturday today, what day is it after ...
- hdu 2035 人见人爱A^B (快速幂)
人见人爱A^B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- 2018蓝桥杯A组:分数(3种方法 循环累称 快速幂运算 移位运算)
一.题目:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + - 每项是前一项的一半,如果一共有20项, 求这个和是多少,结果用分数表示出来. 类似: 3/2 当然,这只是加了前2项而 ...
- 7-238 整数转换为字符串7-242 母牛问题7-243 快速幂
7-238 整数转换为字符串 7-242 母牛问题 7-243 快速幂 7-238 整数转换为字符串 分数 10 全屏浏览题目 切换布局 作者 usx程序设计类课程组 单位 绍兴文理学院 将一个整数n ...
- 分治法 —— 快速幂
快速幂 何为快速幂 Code 递归 (非快速幂) Code 递归 (快速幂) Code 迭代 (非快速幂) Code 迭代 (非快速幂) 结语 何为快速幂 例如 a ^ b ,按正常情况下我们需要从1 ...
最新文章
- AS1.0(2.0)中的XML示例
- swift_002(Swift的String的基本使用)
- mysql数据库性能指标结果_MySQL数据库性能优化的关键参数(转)
- MySQL—增删改查,分组,连表,limit,union,alter,排序,去重
- Boost:异步操作,需要boost :: asio :: async_initiate函数的测试程序
- 【算法】常用的排序方法
- iOS-关于cell的重叠问题
- HDU 1257 最少拦截系统【最长上升子序列】
- Linux 环境下安装 GitLab 与配置
- Mysql查询性能优化
- P2P终结者的工作原理
- C#使用Minidump导出内存快照Minidumper
- 有关彩虹猫病毒的一些小小的分析
- linux 不工作,Ubuntu用户Steam控制器不工作解决办法
- 百家讲坛之评说《资治通鉴》之探寻历史的密码
- 8~mybatis的动态sql
- 时间函数millis( )
- 做UI设计需要具备什么技能
- DNP3 模拟器使用教程
- 阿里云域名实名认证操作图文详情 新人必看