AtCoder:11(数论 & 思维)
来源:互联网 发布:sai软件入门教程 编辑:程序博客网 时间:2024/05/22 12:38
D - 11
Time limit : 2sec / Memory limit : 256MB
Score : 600 points
Problem Statement
You are given an integer sequence of length n+1, a1,a2,…,an+1, which consists of the n integers 1,…,n. It is known that each of the n integers 1,…,n appears at least once in this sequence.
For each integer k=1,…,n+1, find the number of the different subsequences (not necessarily contiguous) of the given sequence with length k, modulo 109+7.
Notes
If the contents of two subsequences are the same, they are not separately counted even if they originate from different positions in the original sequence.
A subsequence of a sequence a with length k is a sequence obtained by selecting k of the elements of a and arranging them without changing their relative order. For example, the sequences 1,3,5 and 1,2,3 are subsequences of 1,2,3,4,5, while 3,1,2 and 1,10,100 are not.
Constraints
- 1≤n≤105
- 1≤ai≤n
- Each of the integers 1,…,n appears in the sequence.
- n and ai are integers.
Input
Input is given from Standard Input in the following format:
na1 a2 ... an+1
Output
Print n+1 lines. The k-th line should contain the number of the different subsequences of the given sequence with length k, modulo 109+7.
Sample Input 1
31 2 1 3
Sample Output 1
3541
There are three subsequences with length 1: 1 and 2 and 3.
There are five subsequences with length 2: 1,1 and 1,2 and 1,3 and 2,1 and 2,3.
There are four subsequences with length 3: 1,1,3 and 1,2,1 and 1,2,3 and 2,1,3.
There is one subsequence with length 4: 1,2,1,3.
Sample Input 2
11 1
Sample Output 2
11
There is one subsequence with length 1: 1.
There is one subsequence with length 2: 1,1.
Sample Input 3
3229 19 7 10 26 32 27 4 11 20 2 8 16 23 5 14 6 12 17 22 18 30 28 24 15 1 25 3 13 21 19 31 9
Sample Output 3
3252554534091923733611075684272048138841563856710092561040193536720354817320573166440818809200371583131668031031668031033715831381880920057316644035481732019353672092561040385671001388415642720481107568237336409205456528331
Be sure to print the numbers modulo 109+7.
思路:显然有一个数是重复出现的,那么需要处理下重复的。假如第i和i+3个数是一样的,此时计算子序列长度为x,在i前面和i+3后面选x-1个数就是重复的部分,减去它即可
,组合数计算用逆元。
# include <bits/stdc++.h>using namespace std;typedef long long LL;const LL mod = 1e9+7;const LL maxn = 1e5+3;LL inv[maxn+8]={1,1}, fi[maxn+8]={1,1}, fac[maxn+8]={1,1};int vis[maxn+8]={0};void init(){ for(int i=2; i<=maxn; ++i) { fac[i] = fac[i-1]*i%mod; inv[i] = (mod-mod/i)*inv[mod%i]%mod; fi[i] = fi[i-1]*inv[i]%mod; }}LL c(LL n, LL m){ return fac[n]*fi[n-m]%mod*fi[m]%mod;}int main(){ init(); int n, t, dis; scanf("%d",&n); for(int i=1; i<=n+1; ++i) { scanf("%d",&t); if(vis[t]) dis = vis[t]+n-i; vis[t] = i; } for(int i=1; i<=n+1; ++i) { LL ans = c(n*1LL+1, i*1LL)%mod; if(dis >= i-1) ans = (ans-c(dis*1LL, i*1LL-1)+mod)%mod; printf("%lld\n",ans); } return 0;}
- AtCoder:11(数论 & 思维)
- AtCoder:Colorful Balls(思维 & 数论)
- AtCoder:Connected?(思维)
- AtCoder:AtCoder Group Contest(思维)
- Atcoder:TrBBnsformBBtion(思维 & 字符串)
- AtCoder:Big Array(思维)
- AtCoder:pushpush(STL & 思维)
- AtCoder:Median Pyramid Hard(思维)
- AtCoder:Median Pyramid Easy(思维)
- AtCoder:Tautonym Puzzle(思维 & 构造)
- AtCoder:Hamiltonish Path(思维 & dfs)
- AtCoder:guruguru(思维 & 差分)
- AtCoder:Fennec VS. Snuke(dfs & 思维)
- AtCoder:Chef Hates Palindromes(思维 & 字符串)
- 简单思维 AtCoder
- AtCoder:Nuske vs Phantom Thnook(思维 & 树)
- AtCoder:A or...or B Problem(思维)
- Atcoder 500 Wide Flip 思维
- 修复Bug,刷新无法动态显示数据库内容
- Qt调用系统动态链接库(系统API)
- smarty 配置问题
- PullToRefreshListView
- iOS 多线程安全之产生原因
- AtCoder:11(数论 & 思维)
- Qt 中有两种方式编译MinGW和MSVC
- cocoaPod新手安装+必须升级Ruby环境
- 面向对象的软件工程
- Mysql的事务
- C++初探
- 自旋锁,信号量,互斥量
- linux-系统基本结构
- 工作总结34 Tomcat7.0.79参数配置的问题