看到这题的复杂度就大概可以知道只是一道规律题了。

但问题是,规律是什么?

我们观察一下题目,不可能去模拟所有情况是吧,我们又发现所有想都是由上一层的数推过来的,于是我们可以把结果用最开始的给出项的系数直接算出来。

但问题又来了,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与测试 奇迹淫巧+快速幂相关推荐

  1. C/C++:计算N的N次方的个位数(巧用快速幂与模运算性质)

    题目描述(源自杭电OJ): 相关数学知识一:取模运算的性质  a乘b的结果对p取模等于a对p取模的结果乘b对p取模的结果再整体取模于p,详见下图 证明过程如下: 相关数学知识二:快速幂运算 以求a的b ...

  2. [CSP-S模拟测试]:涂色游戏(DP+组合数+矩阵快速幂)

    题目描述 小$A$和小$B$在做游戏. 他们找到了一个$n$行$m$列呈网格状的画板.小$A$拿出了$p$支不同颜色的画笔,开始在上面涂色.看到小$A$涂好的画板,小$B$觉得颜色太单调了,于是把画板 ...

  3. 记一次使用快速幂与Miller-Rabin的大素数生成算法

    大家都知道RSA的加密的安全性就是能够找到一个合适的大素数,而现在判断大素数的办法有许多,比如Fermat素性测试或者Miller-Rabin素性测试,而这里我用了Miller-Rabin素性测试的算 ...

  4. Applese 涂颜色(欧拉定理降幂+快速幂)

    链接:https://ac.nowcoder.com/acm/contest/330/E 来源:牛客网 精通程序设计的 Applese 叕写了一个游戏. 在这个游戏中,有一个 n 行 m 列的方阵.现 ...

  5. 43行代码AC_HDU-2604 Queuing(矩阵快速幂,附详细的知识讲解、模板例题)

    一道经典的矩阵快速幂模板题. 传送门1-->快速幂基本思想 传送门2-->矩阵快速幂讲解(教主传授) 传送门3.1-->HDU-1575(经典矩阵快速幂模板题1) 传送门3.2--& ...

  6. What day is that day?(快速幂,打表找周期,或者求通项公式)

    有些题怎么都解不出来,这时候可以打表,找规律,求通项公式等,这些方法让人拍手叫绝,真不错-- Description It's Saturday today, what day is it after ...

  7. hdu 2035 人见人爱A^B (快速幂)

    人见人爱A^B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  8. 2018蓝桥杯A组:分数(3种方法 循环累称 快速幂运算 移位运算)

    一.题目:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + - 每项是前一项的一半,如果一共有20项, 求这个和是多少,结果用分数表示出来. 类似: 3/2 当然,这只是加了前2项而 ...

  9. 7-238 整数转换为字符串7-242 母牛问题7-243 快速幂

    7-238 整数转换为字符串 7-242 母牛问题 7-243 快速幂 7-238 整数转换为字符串 分数 10 全屏浏览题目 切换布局 作者 usx程序设计类课程组 单位 绍兴文理学院 将一个整数n ...

  10. 分治法 —— 快速幂

    快速幂 何为快速幂 Code 递归 (非快速幂) Code 递归 (快速幂) Code 迭代 (非快速幂) Code 迭代 (非快速幂) 结语 何为快速幂 例如 a ^ b ,按正常情况下我们需要从1 ...

最新文章

  1. AS1.0(2.0)中的XML示例
  2. swift_002(Swift的String的基本使用)
  3. mysql数据库性能指标结果_MySQL数据库性能优化的关键参数(转)
  4. MySQL—增删改查,分组,连表,limit,union,alter,排序,去重
  5. Boost:异步操作,需要boost :: asio :: async_initiate函数的测试程序
  6. 【算法】常用的排序方法
  7. iOS-关于cell的重叠问题
  8. HDU 1257 最少拦截系统【最长上升子序列】
  9. Linux 环境下安装 GitLab 与配置
  10. Mysql查询性能优化
  11. P2P终结者的工作原理
  12. C#使用Minidump导出内存快照Minidumper
  13. 有关彩虹猫病毒的一些小小的分析
  14. linux 不工作,Ubuntu用户Steam控制器不工作解决办法
  15. 百家讲坛之评说《资治通鉴》之探寻历史的密码
  16. 8~mybatis的动态sql
  17. 时间函数millis( )
  18. 做UI设计需要具备什么技能
  19. DNP3 模拟器使用教程
  20. 阿里云域名实名认证操作图文详情 新人必看

热门文章

  1. 阿里云配置 https
  2. MD5加密算法(C语言实现,已编译,亲试可用~)
  3. IIS的ISAPI接口
  4. 二阶龙格库塔公式推导_二阶龙格库塔公式.ppt
  5. 关于交流半波与全波整流输出的电压(或电流)有效值和平均值的讨论
  6. SQL Server 创建索引(index)
  7. 怎样自学python_怎样自学Python?
  8. supervise用法_supervise过去式和用法例句
  9. 虚拟机怎么安装操作系统 虚拟机怎么安装win7系统教程
  10. 微信小程序实现发送短信的功能(发送短信)