题目链接

题意:从1号点走到n号点(每条边只能走一次, 两结点间的边数必定为奇数)

问 经过结点不同顺序的方式有多少种(如1->2->3->4和1->3->2->4为两种)

方法数模上1000000007

此题只需先考虑相邻两结点交替的方法数 然后依次递推相乘即可

就是:如从1走到5

只需先考虑2、3交替的方法数:(很明显与边数有关的组合数)

然后类似的考虑3、4交替的方法数

最后全部相乘就可以了

公式是$\displaystyle\prod\limits_{i=1}^n\Bigg({\Large\complement}_{\frac{a_{i+1}-1}{2}+\frac{a_i-1}{2}}^{\frac{a_i-1}{2}}\Bigg)$

$C_n^m$的公式是 $\frac{n!}{m!(n-m)!}$

因为n、m的范围为$10^5$, 所以要进行取模, 因此就要求m!(n-m)!的逆元

要是直接for一遍 再对tmp做ex_gcd 果然TLE。。。

     LL tmp=, ans=;
for(LL i=min(n, m);i>=;i--)
{
tmp=(tmp*i)%mod;
ans=(ans*(n+-i))%mod;
}

所以可以先对$10^5$内的阶乘打个表 预处理一下

 #include <cstdio>
#include <cstdlib>
#include <cstring>
#include <climits>
#include <cctype>
#include <cmath>
#include <string>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
#include <queue>
#include <stack>
#include <vector>
#include <deque>
#include <set>
#include <map>
typedef long long LL;
typedef long double LD;
const double pi=acos(-1.0);
const double eps=1e-;
#define INF 0x3f3f3f
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
typedef pair<int, int> PI;
typedef pair<int, PI > PP;
#ifdef _WIN32
#define LLD "%I64d"
#else
#define LLD "%lld"
#endif
//#pragma comment(linker, "/STACK:1024000000,1024000000")
//LL quick(LL a, LL b){LL ans=1;while(b){if(b & 1)ans*=a;a=a*a;b>>=1;}return ans;}
//inline int read(){char ch=' ';int ans=0;while(ch<'0' || ch>'9')ch=getchar();while(ch<='9' && ch>='0'){ans=ans*10+ch-'0';ch=getchar();}return ans;}
inline void print(LL x){printf(LLD, x);puts("");}
//inline void read(LL &ret){char c;int sgn;LL bit=0.1;if(c=getchar(),c==EOF) return ;while(c!='-'&&c!='.'&&(c<'0'||c>'9')) c=getchar();sgn=(c=='-')?-1:1;ret=(c=='-')?0:(c-'0');while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');if(c==' '||c=='\n'){ ret*=sgn; return ; }while(c=getchar(),c>='0'&&c<='9') ret+=(c-'0')*bit,bit/=10;ret*=sgn;} const int mod=;
int a[];
LL JC[];
void pre()
{
JC[]=;
for(int i=;i<=;i++)
JC[i]=(i*JC[i-])%mod;
}
void ex_gcd(LL a, LL b, LL &x, LL &y)
{
if(b)
{
ex_gcd(b, a%b, x, y);
LL tmp=x;
x=y;
y=tmp-(a/b)*y;
}
else
{
x=, y=;
return ;
}
}
LL C(LL n, LL m)
{
if(n==m || m==)
return ;
if(m== || m==n-)
return n;
// LL tmp=1, ans=1;
// for(LL i=min(n, m);i>=1;i--)
// {
// tmp=(tmp*i)%mod;
// ans=(ans*(n+1-i))%mod;
// }
LL x, y;
ex_gcd(JC[m]*JC[n-m], mod, x, y);
return (JC[n]*x)%mod;
}
LL MOD(LL x)
{
while(x<)
x+=mod;
return x%mod;
}
int main()
{
pre();
int t;
scanf("%d", &t);
while(t--)
{
int n;
scanf("%d", &n);
for(int i=;i<n-;i++)
scanf("%d", &a[i]);
LL ans=;
for(int i=;i<n-;i++)
ans=(ans*C((a[i+]-)/+(a[i]-)/, (a[i]-)/)%mod)%mod;
print(MOD(ans));
}
return ;
}

CSUOJ 1276

[杂题]CSUOJ1276 Counting Route Sequence的更多相关文章

  1. 正睿OI DAY3 杂题选讲

    正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...

  2. dp杂题(根据个人进度选更)

    ----19.7.30 今天又开了一个新专题,dp杂题,我依旧按照之前一样,这一个专题更在一起,根据个人进度选更题目; dp就是动态规划,本人认为,动态规划的核心就是dp状态的设立以及dp转移方程的推 ...

  3. wangkoala杂题总集(根据个人进度选更)

    CQOI2014 数三角形 首先一看题,先容斥一波,求出网格内选三个点所有的情况,也就是C(n*m,3);然后抛出行里三点共线的方案数:C(n,3)*m; 同理就有列中三点共线的方案数:n*C(m,3 ...

  4. 2019暑期金华集训 Day6 杂题选讲

    自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...

  5. Atcoder&CodeForces杂题11.7

    Preface 又自己开了场CF/Atcoder杂题,比昨天的稍难,题目也更有趣了 昨晚炉石检验血统果然是非洲人... 希望这是给NOIP2018续点rp吧 A.CF1068C-Colored Roo ...

  6. Codeforces 杂题集 2.0

      记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序   1326D2 - Prefix-Suffix Palindrome (Hard version) ...

  7. 【Java面试】-- 杂题

    杂题 2019-11-03  21:09:37  by冲冲 1.类加载器的双亲委派机制 类加载器:把类通过类加载器加载到JVM中,然后转换成class对象(通过类的全路径来找到这个类). 双亲委派机制 ...

  8. 贪心/构造/DP 杂题选做Ⅱ

    由于换了台电脑,而我的贪心 & 构造能力依然很拉跨,所以决定再开一个坑( 前传: 贪心/构造/DP 杂题选做 u1s1 我预感还有Ⅲ(欸,这不是我在多项式Ⅱ中说过的原话吗) 24. P5912 ...

  9. 贪心/构造/DP 杂题选做Ⅲ

    颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...

随机推荐

  1. StrHelper

    public class StrHelper { private static string passWord; //加密字符串 /// <summary> /// 判断输入是否数字 // ...

  2. CentOS配置java运行环境

    CentOS_配置_docker CentOS_6.5 1.CentOS_6.5在安装docker-io之前需要首先卸载docker包(没下载过可以省略) $ sudo yum -y remove d ...

  3. Ant 入门

    参考: Ant官网     http://ant.apache.org/ 轻量级java ee企业应用实战(李刚)      Ant当前版本1.9.6      Ant基于Java     配置环境变 ...

  4. Registry uninstall values

    Original link: http://windowssucks.wordpress.com/win-registry-uninstall-values/ -------------------- ...

  5. Struts2文件上传方式与上传失败解决方式

    首先将几个对象弄出来第一个 上传页面第二个 上传action第三个 startut2配置文件 我的文字描述不是很好,但是终归是自己写出来的,后来我在网上看到一篇关于文件上传描述的非常清楚的文章, 链接 ...

  6. Python3 多进程和多线程

    Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为 ...

  7. Cassandra1.2文档学习(5)—— Snitch

    参考资料:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  8. CRUD生成器DBuilder设计与实现

    源码位于github:https://github.com/lvyahui8/dbuilder.git .文中图片如果太小看不清楚,请右键点击“在新标签页中打开”即可看到原图 有兴趣还可以加QQ群交流 ...

  9. python log 层次结构

    文件结构 - run.py - b -- __init__.py run.py import logging import b log = logging.getLogger("" ...

  10. Python设计模式——设计原则

    1.单一职责原则:每个类都只有一个职责,修改一个类的理由只有一个 2.开放-封闭远程(OCP):开放是指可拓展性好,封闭是指一旦一个类写好了,就尽量不要修改里面的代码,通过拓展(继承,重写等)来使旧的 ...