[杂题]CSUOJ1276 Counting Route Sequence
题意:从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的更多相关文章
- 正睿OI DAY3 杂题选讲
正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...
- dp杂题(根据个人进度选更)
----19.7.30 今天又开了一个新专题,dp杂题,我依旧按照之前一样,这一个专题更在一起,根据个人进度选更题目; dp就是动态规划,本人认为,动态规划的核心就是dp状态的设立以及dp转移方程的推 ...
- wangkoala杂题总集(根据个人进度选更)
CQOI2014 数三角形 首先一看题,先容斥一波,求出网格内选三个点所有的情况,也就是C(n*m,3);然后抛出行里三点共线的方案数:C(n,3)*m; 同理就有列中三点共线的方案数:n*C(m,3 ...
- 2019暑期金华集训 Day6 杂题选讲
自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...
- Atcoder&CodeForces杂题11.7
Preface 又自己开了场CF/Atcoder杂题,比昨天的稍难,题目也更有趣了 昨晚炉石检验血统果然是非洲人... 希望这是给NOIP2018续点rp吧 A.CF1068C-Colored Roo ...
- Codeforces 杂题集 2.0
记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序 1326D2 - Prefix-Suffix Palindrome (Hard version) ...
- 【Java面试】-- 杂题
杂题 2019-11-03 21:09:37 by冲冲 1.类加载器的双亲委派机制 类加载器:把类通过类加载器加载到JVM中,然后转换成class对象(通过类的全路径来找到这个类). 双亲委派机制 ...
- 贪心/构造/DP 杂题选做Ⅱ
由于换了台电脑,而我的贪心 & 构造能力依然很拉跨,所以决定再开一个坑( 前传: 贪心/构造/DP 杂题选做 u1s1 我预感还有Ⅲ(欸,这不是我在多项式Ⅱ中说过的原话吗) 24. P5912 ...
- 贪心/构造/DP 杂题选做Ⅲ
颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...
随机推荐
- 基于spark实现表的join操作
1. 自连接 假设存在如下文件: [root@bluejoe0 ~]# cat categories.csv 1,生活用品,0 2,数码用品,1 3,手机,2 4,华为Mate7,3 每一行的格式为: ...
- 组装和拆分JSON
1.组装JSON rs["msg"] = "success"; rs[" ...
- Centos7最小化安装后(minimal)安装图形界面
centos7下载地址:http://mirrors.cqu.edu.cn/CentOS/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso 下载后用vmwa ...
- artice与section的区别
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Ajax的概述与实现过程
一.ajax概述 1.Ajax是Asynchronous([ə'sɪŋkrənəs) JavaScript XML的简写,不是一门新技术,而是对现有技术的综合利用.这一技术能够向服务器请求额外数据而无 ...
- 暑假集训(2)第四弹 ----- 敌兵布阵(hdu1166)
D - 敌兵布阵 Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64bit ...
- Tian Ji -- The Horse Racing
Tian Ji -- The Horse Racing Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Jav ...
- table隔行换色
以前做表格隔行换色,是在tr上添加不同的背景色,但在程序开发的过程需要做判断,不够方便,而且生成的代码也比较多,现在的需求逐渐修改为JQ去控制简洁的表格去显示隔行换色 <script type= ...
- think完全还原原形的 SQL
$dd = Db::getInstance(); //实例连接数据库$sql = "SELECT * FROM `yezi_friendlinks`"; // SQL$ ...
- dynamic 动态获取object数据
1.替代XXX.GetType().GetProperty("YYY").GetValue(XXX) static object GetPerson() { return new ...