题目大意

给你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. xmake v2.1.5版本新特性介绍

    2.1.5版本现已进入收尾阶段,此版本加入了一大波新特性,目前正在进行稳定性测试和修复,在这里,先来介绍下新版本中引入了哪些新特性和改进. 1. 提供类似cmake的find_*系列接口,实现各种查找 ...

  2. Eureka-server配置servlet.context-path后导致Eureka-client注册到server问题

    在springboot项目里配置了servlet.context-path(应用上下文路径),也称之为项目路径,该配置让项目URL后增加配置的值.如果在Eureka-server中配置该值,当然也会改 ...

  3. El 表达式和 Jstl 标签库

    El 表达式学习 1. 什么是 EL 表达式 全称:Expression Language,一种写法非常简介的表达式.语法简单易懂,便于使用.表达式语言的灵感来自于 ECMAScript 和XPath ...

  4. java_第一年_JDBC(7)

    Commons-dbutils是一个开源的JDBC工具类库,对JDBC进行封装,简化编码的工作量,包含的API: org.apache.commons.dbutils.QueryRunner org. ...

  5. 十二、支持向量机(Support Vector Machines)

    12.1 优化目标 参考视频: 12 - 1 - Optimization Objective (15 min).mkv 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都 ...

  6. 【focus-lei 】微服务

    随笔分类 - 微服务 .net core使用NLog+Elasticsearch记录日志 摘要:在微服务或分布式系统中,如果将日志作为文件输出,查看系统日志将非常不便:如果将日志保存到数据库中,又不能 ...

  7. win32 socket编程(四)——服务器端实例(TCP)

    //Server服务器端Server.cpp 1 // 定义控制台应用程序的入口点. // #include "stdafx.h" #include <winsock2.h& ...

  8. http的Content-Encoding和Content-Type及服务器和客户端处理流程

    比如,A 给 B发送了一条信息:hello,首先,A要告诉B,我给你发的这条数据的类型,不同类型的数据,接收方的处理方式不一样,hello属于文本类型,所以Content-Type就要设置成 text ...

  9. 2018团队项目beta阶段成果汇总

    2018团队项目beta阶段成果汇总   第一组:二手书 团队博客:http://www.cnblogs.com/DeltaFish/ 博客汇总:https://www.cnblogs.com/Del ...

  10. leetcode 实现-168.Excel表列名称

    168.Excel表列名称 描述 给定一个正整数,返回它在 Excel 表中相对应的列名称. 例如, 1 -> A 2 -> B 3 -> C … 26 -> Z 27 -&g ...