1207D Number Of Permutations
题目大意
给你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的更多相关文章
- Number Of Permutations
Number Of Permutations 思路:利用容斥,首先所有可能的排列肯定是fac[n],然后可能会有三种 bad 的情况: ①第一个元素的排列是非递减 ②第二种是第二个元素的排列是非递减 ...
- D. Number Of Permutations 符合条件的排列种类
D. Number Of Permutations time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- 双元素非递增(容斥)--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 ...
- CF D. Number Of Permutations 排列
挺水的一道题~ 拿全排列随便乘一下就好了. #include <cstdio> #include <algorithm> #define N 300004 #define ll ...
- codeforces 341C Iahub and Permutations(组合数dp)
C. Iahub and Permutations time limit per test 1 second memory limit per test 256 megabytes input sta ...
- hdu 4055 Number String(dp)
Problem Description The signature of a permutation is a string that is computed as follows: for each ...
- codeforces 340E Iahub and Permutations(错排or容斥)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Iahub and Permutations Iahub is so happy ...
- hdu 4055 Number String(有点思维的DP)
Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu4055 Number String
Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
随机推荐
- xmake v2.1.5版本新特性介绍
2.1.5版本现已进入收尾阶段,此版本加入了一大波新特性,目前正在进行稳定性测试和修复,在这里,先来介绍下新版本中引入了哪些新特性和改进. 1. 提供类似cmake的find_*系列接口,实现各种查找 ...
- Eureka-server配置servlet.context-path后导致Eureka-client注册到server问题
在springboot项目里配置了servlet.context-path(应用上下文路径),也称之为项目路径,该配置让项目URL后增加配置的值.如果在Eureka-server中配置该值,当然也会改 ...
- El 表达式和 Jstl 标签库
El 表达式学习 1. 什么是 EL 表达式 全称:Expression Language,一种写法非常简介的表达式.语法简单易懂,便于使用.表达式语言的灵感来自于 ECMAScript 和XPath ...
- java_第一年_JDBC(7)
Commons-dbutils是一个开源的JDBC工具类库,对JDBC进行封装,简化编码的工作量,包含的API: org.apache.commons.dbutils.QueryRunner org. ...
- 十二、支持向量机(Support Vector Machines)
12.1 优化目标 参考视频: 12 - 1 - Optimization Objective (15 min).mkv 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都 ...
- 【focus-lei 】微服务
随笔分类 - 微服务 .net core使用NLog+Elasticsearch记录日志 摘要:在微服务或分布式系统中,如果将日志作为文件输出,查看系统日志将非常不便:如果将日志保存到数据库中,又不能 ...
- win32 socket编程(四)——服务器端实例(TCP)
//Server服务器端Server.cpp 1 // 定义控制台应用程序的入口点. // #include "stdafx.h" #include <winsock2.h& ...
- http的Content-Encoding和Content-Type及服务器和客户端处理流程
比如,A 给 B发送了一条信息:hello,首先,A要告诉B,我给你发的这条数据的类型,不同类型的数据,接收方的处理方式不一样,hello属于文本类型,所以Content-Type就要设置成 text ...
- 2018团队项目beta阶段成果汇总
2018团队项目beta阶段成果汇总 第一组:二手书 团队博客:http://www.cnblogs.com/DeltaFish/ 博客汇总:https://www.cnblogs.com/Del ...
- leetcode 实现-168.Excel表列名称
168.Excel表列名称 描述 给定一个正整数,返回它在 Excel 表中相对应的列名称. 例如, 1 -> A 2 -> B 3 -> C … 26 -> Z 27 -&g ...