题目链接:http://arc077.contest.atcoder.jp/tasks/arc077_b

题解:有n+1个数只有一个数字是有重复出现的,要求一共有多少不同的组合显然和这两个数的位置有关系,具体看一下代码就能理解了

就是组合数学看一下代码就好理解了,这题比较简单不多加解释。

#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#define mod 1000000007
using namespace std;
const int M = 1e5 + 10;
typedef long long ll;
int a[M];
bool vis[M];
ll up[M] , down[M] , up2[M] , down2[M];
ll inv(ll a) {
return a == 1 ? 1 : (ll)(mod - mod / a) * inv(mod % a) % mod;
}
int main() {
int n;
scanf("%d" , &n);
for(int i = 1 ; i <= n + 1 ; i++) scanf("%d" , &a[i]);
memset(vis , 0 , sizeof(vis));
int pos1 = 0 , pos2 = 0 , gg;
for(int i = 1 ; i <= n + 1 ; i++) {
if(!vis[a[i]]) {
vis[a[i]] = true;
continue;
}
else {
pos2 = i;
gg = a[i];
break;
}
}
for(int i = 1 ; i <= n + 1 ; i++) {
if(a[i] == gg) {
pos1 = i;
break;
}
}
int num = n - pos2 + 1;
int num2 = pos1 - 1;
num += num2;
up[0] = 1 , down[0] = 1 , up2[0] = 1 , down2[0] = 1;
n++;
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 = 1 ; i <= num / 2 ; i++) up2[i] = up2[i - 1] * (num - i + 1) % mod , down2[i] = down2[i - 1] * i % mod;
for(int i = num / 2 + 1 ; i <= num ; i++) up2[i] = up2[num - i] , down2[i] = down2[num - i];
for(int i = 1 ; i <= n ; i++) {
ll sum = 0;
if(i == 1) {
printf("%lld\n" , (ll)(n - 1));
}
else {
sum += up[i] * inv(down[i]) % mod;
if(num >= i - 1 && num > 0) sum -= up2[i - 1] * inv(down2[i - 1]) % mod;
printf("%lld\n" , (sum + mod) % mod);
}
}
return 0;
}

最新文章

  1. Selenium碰到的异常记录
  2. Sqlite学习笔记(三)&amp;&amp;WAL性能测试
  3. BZOJ2440 [中山市选2011]完全平方数
  4. COGS1117
  5. 讲讲你不知道的 ARC (一)
  6. POJ1061青蛙的约会(扩展欧几里得)
  7. leetcode@ [322] Coin Change (Dynamic Programming)
  8. [ExtJS5学习笔记]第十节 Extjs5新增特性之ViewModel和DataBinding
  9. Vue2.0源码阅读笔记--双向绑定实现原理
  10. postman 第3节 API请求和查看响应结果(转)
  11. BZOJ_4196_[Noi2015]软件包管理器_树链剖分
  12. iview 将table的selection多选变单选方法
  13. ceph API之PHP的客户端连接
  14. Linux基础命令---文本统计wc
  15. 记录结果再利用的&quot;动态规划&quot;之背包问题
  16. python中的replace
  17. MSCRM中报表开发一:创建基于SQL报表
  18. Apache中的Order Allow,Deny用法详解
  19. 4 CRM-权限管理rbac、github代码
  20. virtualenvwrapper安装和常用指令(mac)

热门文章

  1. Where is the clone one and how to extract it?
  2. java的jar打包工具的使用
  3. 使用request获取访问者的真实IP
  4. Go“一个包含nil指针的接口不是nil接口”踩坑
  5. Python学习系列(四)Python 入门语法规则2
  6. java8(1)--- lambda
  7. java虚拟机学习笔记(四)---回收方法区
  8. kafka客户端和服务端开发(三)
  9. 一文速览Vue全栈
  10. Docker 更新版本