题目链接:http://codeforces.com/contest/816/problem/D

题解:显然一看到这题应该会想到是有什么规律的于是多写几项就会发现偶数列之间是有关系的。

满足a[i][j]=a[i-2][j]+a[i-2][j+2],于是递推到最后第2列a[2][0],a[2][1]就可以用最早出现的偶数列来求的,最后是加还是减只要看n就行了。

由于a[2][0]是有几个最早出现的偶数列的奇数项求的,而且这些奇数项选择的次数符合二项式分布(这个可以通过花一下杨辉三角理解一下)。

#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#define mod 1000000007
using namespace std;
const int M = 2e5 + 10;
typedef long long ll;
ll anum[M] , bnum[M] , up[M] , down[M];
ll inv(ll a) {
return a == 1 ? 1 : (ll)(mod - mod / a) * inv(mod % a) % mod;
}
//ll C(ll n , ll m)
//{
// if(m < 0)return 0;
// if(n < m)return 0;
// if(m > n-m) m = n-m;
// ll up = 1, down = 1;
// for(ll i = 0 ; i < m ; i++){
// up = up * (n-i) % mod;
// down = down * (i+1) % mod;
// }
// return up * inv(down) % mod;
//}//原先利用逆元的算法,但是这里直接求会超时与处理一下up和down就行。
int main() {
int n;
scanf("%d" , &n);
for(int i = 0 ; i < n ; i++) scanf("%lld" , &anum[i]) , bnum[i] = anum[i];
if(n == 1) {printf("%lld\n" , anum[0]); return 0;}
if(n & 1) {
n--;
int flag = 1;
for(int i = 0 ; i < n ; i++) {
if(flag) anum[i] = (bnum[i] + bnum[i + 1]) % mod;
else anum[i] = (bnum[i] - bnum[i + 1] + mod) % mod;
flag ^= 1;
}
}
n = n / 2 - 1;
ll ans1 = 0 , ans2 = 0;
up[0] = 1 , down[0] = 1;
for(int i = 1 ; i <= n / 2 ; i++) up[i] = up[i - 1] * (n - i + 1) % mod , down[i] = down[i - 1] * i % mod;
for(int i = n / 2 + 1 ; i <= n ; i++) up[i] = up[n - i] , down[i] = down[n - i];
for(int i = 0 ; i <= n ; i++) {
ans1 += anum[2 * i] * (up[i] * inv(down[i]) % mod) % mod;
ans1 %= mod;
ans2 += anum[2 * i + 1] * (up[i] * inv(down[i]) % mod) % mod;
ans2 %= mod;
}
if(n % 2) ans1 = (ans1 - ans2 + mod) % mod;
else ans1 = (ans1 + ans2) % mod;
printf("%lld\n" , ans1);
return 0;
}

最新文章

  1. Opserver简单部署
  2. [CodeWars][JS]实现大整数加法
  3. wex5 实战 wex5与js的组件关系与执行顺序(父子与先后)
  4. 一个DIV三列布局100%高度自适应的好例子(国外)
  5. 常见半监督方法 (SSL) 代码总结
  6. 開始折腾cocos2d-x,使用批处理来创建项目
  7. python模块之paramiko
  8. iOS RGB颜色封装
  9. 宏定义&amp;CodeBlocks&amp;Glib
  10. windows phone 7 客户端和web的交互(WebBrowser的使用)
  11. 自己写RTPserver——大约RTP协议
  12. 【BZOJ3506】【Cqoi2014】排序机械臂
  13. ubuntu window 10 双系统
  14. 面向对象编程思想(OOP)
  15. mysql学习笔记--数据库多表查询
  16. SVN用法及常见问题分析
  17. 【hyperscan】示例解读 simplegrep
  18. Android 模仿微信启动动画
  19. 树莓派进阶之路 (030) -Picustom.h(原创)
  20. 关于CentOS 6下Hadoop占用系统态CPU高的处理办法【转】

热门文章

  1. 数字麦克风PDM信号采集与STM32 I2S接口应用(二)
  2. Docker——理解好镜像和容器的关系
  3. Echarts图表插件(4.x版本)使用(二、带分类筛选的多个图表/实例化多个ECharts,以关系图/force为例)
  4. 【Java例题】7.3 线程题3-素数线程
  5. python开发基础--思维导图
  6. JSmooth 将java代码打包成exe
  7. 通俗易懂--循环神经网络(RNN)的网络结构!(TensorFlow实现)
  8. mybatis 源码分析(一)框架结构概览
  9. hadoop2.7之作业提交详解(上)
  10. 2014-09~11Removeapp配置篇