题目链接:https://atcoder.jp/contests/abc172/tasks/abc172_e

题意:从mmm个数中选择分别选择nnn个数组合成两个序列A,BA,BA,B,满足Ai!=BiA_i != B_iAi​!=Bi​且每个序列都没有相同的数,问这样的序列一共有多少对。

思路:首先,我们可以考虑从mmm个数里面选择nnn个数,一共可以组成多少个序列,答案就是AmnA_m^nAmn​,这样就相当于确定了AAA序列的个数。这样我们就可以知道BBB序列的个数就是从mmm个数里选择nnn个数,其中第iii个数不为iii的序列个数。
那该怎么求呢?这时候就可以用容斥原理啦!
第iii个数不为iii的并集和 = 总数 - 一个数不为iii + 两个数不为iii - 三个数不为iii + …
这样答案就出来啦,具体实现详见代码。

AC代码:

#define _CRT_SECURE_NO_WARNINGS 1#include <set>
#include <map>
#include <stack>
#include <queue>
#include <cmath>
#include <ctime>
#include <vector>
#include <cstdio>
#include <string>
#include <iomanip>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;#define LL long long
#define pii pair<int,int>
#define sd(x) scanf("%d",&x)
#define slld(x) scanf("%lld",&x)
#define pd(x) printf("%d\n",x)
#define plld(x) printf("%lld\n",x)
#define rep(i,a,b) for(int i = (a) ; i <= (b) ; i++)
#define per(i,a,b) for(int i = (a) ; i >= (b) ; i--)
#define mem(a) memset(a,0,sizeof(a))
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
#define fast_io ios::sync_with_stdio(false)const LL mod = 1e9 + 7;
const int maxn = 5e5 + 7;
const int INF = 0x3f3f3f3f;
const double pi = acos(-1.0);LL f[maxn],inv[maxn];void init() {inv[0] = f[0] = inv[1] = f[1] = 1;for(LL i = 2 ; i <= maxn ; i++) {inv[i] = ((mod - mod / i) * inv[mod%i]) % mod;f[i] = i;}for(LL i = 2 ; i <= maxn ; i++) {inv[i] = (inv[i] * inv[i-1]) % mod;f[i] = (f[i] * f[i-1]) % mod;}
}LL C(LL x,LL y) {return f[x] * inv[y] % mod * inv[x-y] % mod;
}LL A(LL x,LL y) {return f[x] * inv[x-y] % mod;
}
int main() {#ifndef ONLINE_JUDGE
//  freopen("in.txt", "r", stdin);
//  freopen("out.txt", "w", stdout);long _begin_time = clock();
#endifinit();int n,m;sd(n),sd(m);LL ans = A(m,n);for(LL i = 1 ; i <= n ; i++) {LL res = C(n,i) * A(m - i , n - i) % mod;if(i&1) ans = (ans - res + mod) % mod;else ans = (ans + res) % mod;}ans = ans * A(m,n) % mod;plld(ans);#ifndef ONLINE_JUDGElong _end_time = clock();// cout << "time = " <<  _end_time - _begin_time << endl;
#endifreturn 0;
}

AtCoder ABC172 E - NEQ(组合数 + 容斥原理)相关推荐

  1. AtCoder AGC039F Min Product Sum (容斥原理、组合计数、DP)

    题目链接 https://atcoder.jp/contests/agc039/tasks/agc039_f 题解 又是很简单的F题我不会... 考虑先给每行每列钦定一个最小值\(a_i,b_j\), ...

  2. [CQOI2014]数三角形 组合数 + 容斥 + gcd

    推导过程 : 组合数+容斥原理+gcd 正确做法是暴力的一种优化,ans=所有情况 - 平行坐标轴的三点共线 - 斜线三点共线 如果快速求斜线三点共线: 首先要知道一个结论,对于点(a,b) (x,y ...

  3. 容斥原理与欧拉函数与莫比乌斯函数,狄利克雷卷积与莫比乌斯变换,反演

    莫比乌斯函数可以看成是一种被内化了的容斥原理,许多数论上的结论定理根据容斥原理和数学归纳法可以推导出来,但是有关容斥原理的表达式的构造往往并不容易,运气不好很难找到,而莫比乌斯函数则是巧妙的把容斥原理 ...

  4. OI每周刷题记录——lrllrl

    看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...

  5. AtCoder Beginner Contest 172 E - NEQ(二项式反演)

    AtCoder Beginner Contest 172 E - NEQ 题意: 求满足下列条件的长度为 NNN且包含 [1,M][1, M][1,M]范围内整数的序列 A1,A2,⋯,ANA_1, ...

  6. AtCoder AGC035F Two Histograms (组合计数、容斥原理)

    题目链接 https://atcoder.jp/contests/agc035/tasks/agc035_f 题解 B题难度的F题--然而我还是不会 假设第\(i\)行染的长度是\(a_i\), 第\ ...

  7. AtCoder 2000 [AGC002F] Leftmost Ball(dp+组合数)

    problem 洛谷链接 solution 显然,合法序列的状态要求任何一个前缀的白色球数≥\ge≥已出现的不同颜色数. 所以可以将球分成白色球和有颜色球两类球分开放. 其次,有颜色球一类重要的是有颜 ...

  8. 【题解】AtCoder ARC128D - Neq Neq

    题意:有 NNN 个球排成一行,编号为 111 到 NNN . 第 iii个球上写着一个数AiA_iAi​. 你可以执行下列操作任意多次: 选三个相邻的位置 xxx, yyy, zzz (1≤x< ...

  9. AtCoder Beginner Contest 266(C- G)「判凸包」「dp」「期望」「基环树」「组合数」

    abc好好好. C - Convex Quadrilateral (atcoder.jp) 思路: 判凸包,向量叉积×=|a|*|b|*sin.叉积<0即角>180°. (可以勉勉强强算我 ...

最新文章

  1. Pairs Forming LCM LightOJ - 1236
  2. linux挂载到哪个分区,Linux中直接挂载硬盘和挂载分区有什么区别?
  3. NLP中关键字提取方法总结和概述
  4. 沉思录---Windows Phone软件开发Beta版回首
  5. Log4j 2使用教程
  6. 邻接表2 -试在邻接表存储结构上实现图的基本操作 del_vertex-数据结构-图-icoding
  7. 权限申请_Android 开发工程师必须掌握的动态权限申请,三步轻松搞定!
  8. C 语言实例 - 判断闰年
  9. 老板:kill -9 的原理都不知道就敢在线上执行?
  10. 支持MySql的数据库自动分表工具DBShardTools发布
  11. mysql 库迁移工具_mysql数据库迁移,有什么工具或许办法
  12. 细说进程、应用程序域与上下文之间的关系(三)—— 深入了解.NET上下文
  13. 遗传算法c语言 x^2,c语言遗传算法 解决 y=x2问题
  14. c语言烟花代码devc,C语言烟花程序
  15. 四旋翼飞行器——飞行原理
  16. 系统性能测试实施流程
  17. 【U8+】修改查询凭证列表中的系统名
  18. python中单引号、双引号、三单引号、三双引号用法详解
  19. 00900网页设计与制作多选题
  20. 使用Bmob云端服务器模拟简单的注册登录

热门文章

  1. 生命旅程中何生命个体
  2. python初学火车座位判断_初学Python实现学校图书馆座位自动抢座预约
  3. PS自用(抠图、调色)
  4. 大厂秋招~华为荣耀字节腾讯美团滴滴
  5. azul zing_Azul垃圾收集器
  6. [转] 快速掌握一个语言最常用的50%
  7. iOS16.0:屏幕旋转
  8. (转)当android调试遇到ADB server didn't ACK以及顽固的sjk_daemon进程 .
  9. 您全面了解“含胸拔背”吗?
  10. javascript 模拟退格键_js按钮模拟键盘退格键定位删除问题