题目大意

给你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. mooc-IDEA 项目/文件之间跳转--002

    二.IntelliJ IDEA -项目之间跳转 1.Next Project Window :跳转到下一个项目 [ ctrl+alt+) ] 2.Previous Project Window:跳转到 ...

  2. [19/05/20-星期一] CSS_css的盒子模型

    一.盒子模型 <!DOCTYPE html> <html> <!-- div 标签 块级标签 主要用来网页布局, 会将其中的子元素内容作为一个独立的整体存在 默认宽度是页 ...

  3. [19/05/15-星期三] HTML_body标签(超链接标签和锚点)

    一.超链接标签 <html> <head> <meta charset="UTF-8"> <title>04 body超链接标签学习 ...

  4. Jenkins安装配置 远程发布SpringBoot项目

    环境要求: Java : 1.8.0_161. Maven :http://maven.apache.org/download.cgi 3.6.1 下载完解压,配置环境变量:vim /etc/prof ...

  5. String.indexOf()的使用方法

    String.indexOf()的用途: 返回此字符串中第一个出现的指定的子字符串,如果没有找到则返回-1 源码如下: /** * Returns the index within this stri ...

  6. [BZOJ2829] 信用卡 (凸包)

    [BZOJ2829] 信用卡 (凸包) 题面 信用卡是一个矩形,唯四个角做了圆滑处理,使他们都是与矩形两边相切的1/4园,如下图所示,现在平面上有一些规格相同的信用卡,试求其凸包的周长.注意凸包未必是 ...

  7. 08-js流程控制、循环、元素操作

    # js流程控制 > 流程控制用于基于不同的条件来执行不同的动作. ### if语句 >if... else ... >if ... else if ... else... > ...

  8. Taro -- 微信小程序wxParse达到html转换wxml

    Taro微信小程序可以用wxParse来达到html转换wxml的效果:https://github.com/NervJS/taro-components-test/blob/master/src/p ...

  9. OGG-01169

    OGG-01169  Oracle GoldenGate Delivery for Oracle, dwarer.prm:  Encountered an update where all key c ...

  10. 解决pycharm运行py文件时只有unittest选项的方法

    有时候在编完脚本开始运行时,发现某个py脚本右键运行的选项不是run,二是run in unittest,试过很多方法都不能很好的去除,主要是因为脚本中含有test字符串,一种解决方法是将脚本中所有的 ...