题目大意

给你n个二元组

问你有几种排列是的按两个关键字中的任意一个都不是不降排列的

分析

不妨容斥

我们先加上总的方案数$n!$

之后我们按第一个关键字排序

因为值相同的情况下不影响答案

所以让总方案数减去$\prod sum_{ai}!$即可

对于第二关键字的情况同上

我们再使序列同时按照第一关键字和第二关键字排序

然后总方案数加上$\prod sum_{(ai,bi)}!$即可

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
#define int long long
const int mod = ;
int p[],n,m,Ans;
struct node {
int x,y;
};
node d[];
inline void init(){
int i,j,k;
p[]=;
for(i=;i<=n;i++)p[i]=p[i-]*i%mod;
}
inline bool cmp1(const node a,const node b){
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
inline bool cmp2(const node a,const node b){
return a.y<b.y;
}
signed main(){
int i,j,k;
scanf("%lld",&n);
init();
for(i=;i<=n;i++)scanf("%lld%lld",&d[i].x,&d[i].y);
Ans=p[n];
sort(d+,d+n+,cmp1);
int res=;
for(i=;i<=n;i++){
j=i;
while(j+<=n&&d[j+].x==d[j].x)j++;
res=res*p[j-i+]%mod;
i=j;
}
Ans=(Ans-res+mod)%mod;
sort(d+,d+n+,cmp2);
res=;
for(i=;i<=n;i++){
j=i;
while(j+<=n&&d[j+].y==d[j].y)j++;
res=res*p[j-i+]%mod;
i=j;
}
Ans=(Ans-res+mod)%mod;
sort(d+,d+n+,cmp1);
int ok=;
for(i=;i<=n;i++)
if(d[i].y<d[i-].y){
ok=;
break;
}
res=;
if(ok){
for(i=;i<=n;i++){
j=i;
while(j+<=n&&d[j+].y==d[j].y&&d[j+].x==d[j].x)j++;
res=res*p[j-i+]%mod;
i=j;
}
Ans=(Ans+res)%mod;
}
cout<<Ans<<"\n";
return ;
}

1207D Number Of Permutations的更多相关文章

  1. Number Of Permutations

    Number Of Permutations 思路:利用容斥,首先所有可能的排列肯定是fac[n],然后可能会有三种 bad 的情况: ①第一个元素的排列是非递减 ②第二种是第二个元素的排列是非递减 ...

  2. D. Number Of Permutations 符合条件的排列种类

    D. Number Of Permutations time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  3. 双元素非递增(容斥)--Number Of Permutations Educational Codeforces Round 71 (Rated for Div. 2)

    题意:https://codeforc.es/contest/1207/problem/D n个元素,每个元素有a.b两个属性,问你n个元素的a序列和b序列有多少种排序方法使他们不同时非递减(不同时g ...

  4. CF D. Number Of Permutations 排列

    挺水的一道题~ 拿全排列随便乘一下就好了. #include <cstdio> #include <algorithm> #define N 300004 #define ll ...

  5. codeforces 341C Iahub and Permutations(组合数dp)

    C. Iahub and Permutations time limit per test 1 second memory limit per test 256 megabytes input sta ...

  6. hdu 4055 Number String(dp)

    Problem Description The signature of a permutation is a string that is computed as follows: for each ...

  7. codeforces 340E Iahub and Permutations(错排or容斥)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Iahub and Permutations Iahub is so happy ...

  8. hdu 4055 Number String(有点思维的DP)

    Number String Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  9. hdu4055 Number String

    Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

随机推荐

  1. Maven 标准项目结构

    项目结构 src main java         源文件 resources    资源文件 filters   资源过滤文件 config   配置文件 scripts   脚本文件 webap ...

  2. Git-第三篇廖雪峰Git教程学习笔记(2)回退修改,恢复文件

    1.工作区 C:\fyliu\lfyTemp\gitLocalRepository\yangjie 2.版本库 我们使用git init命令创建的.git就是我们的版本库.Git的版本库里存了很多东西 ...

  3. LeetCode102. 二叉树的层次遍历

    102. 二叉树的层次遍历 描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 示例 例如,给定二叉树: [3,9,20,null,null,15,7], 3 / ...

  4. github(1):

    1.目的:借助github托管项目带按摩 2.仓库:创建一个Repository 3.收藏(Start):仓库主页start按钮,意思是收藏项目的人数,在github上如果有一个项目获得100个sta ...

  5. Python 爬虫 校花网

    爬虫:是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. 福利来了  校花网 ,首先说为什么要爬这个网站呢,第一这个网站简单爬起来容易,不会受到打击,第二呢 你懂得.... 1.第一步,需要下 ...

  6. go中基本数据类型的相互转换

    代码 // 基本数据类型的相互转换 package main import ( // 如果一个包没有被使用过,但又不想去掉,可在包名前加"_ "表示忽略 // 比如:_ " ...

  7. 2018-8-10-C#-TimeSpan-时间计算

    title author date CreateTime categories C# TimeSpan 时间计算 lindexi 2018-08-10 19:16:51 +0800 2018-06-1 ...

  8. js 一个不得不注意的浏览器兼容性问题 进制转换

    写几行JS代码 var num = '022'; alert(num+' '+parseInt(num)+' '+parseInt(num,10)); 不同的浏览器将会得到不同的结果在谷歌浏览器下的结 ...

  9. UNIX网络编程总结一

    客户与服务器通信使用TCP在同一网络通信时,大致按下面的方式通信:client→TCP→IP→以太网驱动程序→以太网→以太网驱动程序→IP→TCP→server.若不在同一网络则需要路由器连接. 客户 ...

  10. paste 合并文件

    1.命令功能 paste  用于合并文件的列,把每个文件以列对列的方式,一列列地加以合并. 2.语法格式 paste  option  file 参数选项 参数 参数说明 -d 指定间隔符合并文件(默 ...