CodeForces 57C Array 组合计数+逆元
题目链接:
http://codeforces.com/problemset/problem/57/C
题意:
给你一个数n,表示有n个数的序列,每个数范围为[1,n],叫你求所有非降和非升序列的个数。
题解:
由于对称性,我们只要求非降序的个数就可以了(n个数全部相等的情况既属于非升也属于非降)
我们在满足条件的n个数之前加一个虚节点1,在第n个数之后加一个虚节点n,那么考虑这n+2个数组成的非降序列:
假设序列里的第i个数为a[i],我们设xi=a[i+1]-a[i]+1,1<=i<=n+1,则满足每个数>=1,且sum(x[1],x[2]...x[n+1])=2*n;
那么相当于求将2*n分成n个部分,且每个部分的值大于等于1,则易得非降序列总数为:C(n,2*n-1)(2*n-1 选 n)
所以最后的答案是2*C(n,2*n-1)-n;
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; const int mod = ;
typedef long long LL;
int n;
//扩展欧几里得
void gcd(int a, int b, int &d, int &x, int &y) {
if (!b) { d = a; x = ; y = ; }
else { gcd(b, a%b, d, y, x); y -= x*(a / b); }
}
//求逆元
int inv(int a) {
int d, x, y;
gcd(a, mod, d, x, y);
return x;
}
//求阶乘
int solve(int _n,int x) {
LL ret = ;
while (_n--) {
ret *= x;
ret %= mod;
x--;
}
return ret;
} int main() {
while (scanf("%d", &n) == && n) {
int ans = (LL)solve(n, * n - )*inv(solve(n,n))%mod;
ans = ans * - n;
ans = (ans%mod + mod) % mod;
printf("%d\n", ans);
}
return ;
}
CodeForces 57C Array 组合计数+逆元的更多相关文章
- Codeforces 57C Array dp暴力找到规律
主题链接:点击打开链接 的非增量程序首先,计算, 如果不增加的节目数量x, 非减少一些方案是x 答案就是 2*x - n 仅仅需求得x就可以. 能够先写个n3的dp,然后发现规律是 C(n-1, 2* ...
- [总结]数论和组合计数类数学相关(定理&证明&板子)
0 写在前面 0.0 前言 由于我太菜了,导致一些东西一学就忘,特开此文来记录下最让我头痛的数学相关问题. 一些引用的文字都注释了原文链接,若侵犯了您的权益,敬请告知:若文章中出现错误,也烦请告知. ...
- 【BZOJ5323】[JXOI2018]游戏(组合计数,线性筛)
[BZOJ5323][JXOI2018]游戏(组合计数,线性筛) 题面 BZOJ 洛谷 题解 显然要考虑的位置只有那些在\([l,r]\)中不存在任意一个约数的数. 假设这样的数有\(x\)个,那么剩 ...
- 【BZOJ4830】[HNOI2017]抛硬币(组合计数,拓展卢卡斯定理)
[BZOJ4830][HNOI2017]抛硬币(组合计数,拓展卢卡斯定理) 题面 BZOJ 洛谷 题解 暴力是啥? 枚举\(A\)的次数和\(B\)的次数,然后直接组合数算就好了:\(\display ...
- bzoj 1004 Cards 组合计数
这道题考察的是组合计数(用Burnside,当然也可以认为是Polya的变形,毕竟Polya是Burnside推导出来的). 这一类问题的本质是计算置换群(A,P)中不动点个数!(所谓不动点,是一个二 ...
- [ZJOI2010]排列计数 (组合计数/dp)
[ZJOI2010]排列计数 题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有 ...
- WC集训DAY2笔记 组合计数 part.1
目录 WC集训DAY2笔记 组合计数 part.1 基础知识 组合恒等式 错排数 卡特兰数 斯特林数 伯努利数 贝尔数 调和级数 后记 补完了几天前写的东西 WC集训DAY2笔记 组合计数 part. ...
- bzoj 2281 [Sdoi2011]黑白棋(博弈+组合计数)
黑白棋(game) [问题描述] 小A和小B又想到了一个新的游戏. 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色. 最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色 ...
- BZOJ 4555: [Tjoi2016&Heoi2016]求和 [分治FFT 组合计数 | 多项式求逆]
4555: [Tjoi2016&Heoi2016]求和 题意:求\[ \sum_{i=0}^n \sum_{j=0}^i S(i,j)\cdot 2^j\cdot j! \\ S是第二类斯特林 ...
随机推荐
- 默认情况下eth0网卡配置文件路径及客户端DNS的路径
默认情况下eth0网卡配置文件路径及客户端DNS的路径? eth0 网卡配置文件路径如下: /etc/sysconfig/network-scripts/ifcfg-eth0 客户端DNS的路径如下: ...
- php文件相关操作
//遍历目录及文件 function myBianli($dirname){ //1.打开 $dir = opendir($dirname); //2.读取 while($filename = rea ...
- 文库网站建设,文库网站PHP代码,TP开发文库网
专业定制仿百度文库网站系统,文库网站系统源码,文库网站建设开发,支持电脑版+手机版+微信版+小程序版+APP版,由10年的技术团队专业定制,需要的朋友可以联系我们.网站采用:PHP+MySQL+t ...
- Python实现注册和三次验证登录
# 帐户表account:# sylar:123# alex:456# wusir:789# taibai:789# 需熟练的知识点:文件操作with open()/write()/read().去掉 ...
- python实现文件夹的排序
我的github地址. 代码: # -*- coding: utf-8 -*- __author__ = "YuDian" ''' v1.0: 2018/3/19 21:39 完成 ...
- Nexus Repository3安装和maven,npm配置(Linux)
Nexus Repository下载 根据操作系统选择指定版本,本文针对Linux安装,其他的安装过程可能有所差异. https://help.sonatype.com/repomanager3/do ...
- 20155233 《Java程序设计》实验五 Java网络编程及安全
实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 实验1 两人一组结对编程: 0. 参考http://www.cnblogs.com/rocedu/p/67 ...
- 2016-2017-2 20155322 实验三 敏捷开发与XP实践
2016-2017-2 20155322 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验知识点 敏捷开发(Agile Development)是一种以人为核心.迭代.循序 ...
- CF 987 D. Fair
D. Fair http://codeforces.com/contest/987/problem/D 题意: n个城镇m条道路,(保证没有重边,两个城镇间可以到达),每个城镇拥有的特产ai(可能多个 ...
- Spark优化一则 - 减少Shuffle
Spark优化一则 - 减少Shuffle 看了Spark Summit 2014的A Deeper Understanding of Spark Internals,视频(要***)详细讲解了Spa ...