转化一下题意:给出矩阵每行每列的最大值,求满足条件的矩阵个数。

先将A,B按从大到小排序,显然没有什么影响。如果A的最大值不等于B的最大值那么无解否则一定有解。

考虑从大到小枚举A,B中出现的数s,那么可以将这个矩形分成一些不同的矩形或者L形使之互不影响,且位置的值在[0,s]中,且每行每列的最大值均为s,最后用分步乘法计数原理求解。

例:

5

1 2 2 3 5

2 2 3 4 5

由于矩形是特殊的L形于是我们只考虑L形:

设拐点的矩形为a*b,L上部高为c,左部长为d。

考虑容斥,设f[i]为至少有i行的限制不满足条件(每列都要满足条件),

那么$f[i]=C_a^i * ( s^i * ( (s+1)^{a+c-i} - s^{a+c-i} ))^b * (s^i * (s+1)^{a-i} )^d$

$s^i$保证i行不满足限制,$((s+1)^{a+c-i}-s^{a+c-i})$表示剩下的至少一个满足限制条件(为保证列满足),b次方即每列。这样就考虑完了前b列。

那么多出来的d列呢?大致相同。$(s^i*(s+1)^{a-i})^d$可以发现并没有保证列满足,因为L型左部上面一定比这里大,那么已经保证列满足限制,所以这里就随便选了。

$ans=\prod \sum _{i=0}^{a} -1^i*f[i]$

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define LL long long
using namespace std;
const int mod=1e9+;
struct Hash_map
{
int fi[],ni[],siz;
int key[],val[];
inline int &operator [] (int x)
{
int k=x%;int i=fi[k];
for(;i&&key[i]!=x;i=ni[i]);
if(!i)i=++siz,key[i]=x,val[i]=,ni[i]=fi[k],fi[k]=i;
return val[i];
}
}ta,tb;
LL poww(LL a,LL b);
LL jc[],inv[];
LL CC(LL n,LL m){return jc[n]*inv[m]%mod*inv[n-m]%mod;}
int n,A[],B[],C[],cnt;
bool cmp(int a,int b){return a>b;}
LL f[];
signed main()
{
// freopen("silhouette4.in","r",stdin); jc[]=inv[]=;for(int i=;i<=;i++)jc[i]=jc[i-]*i%mod,inv[i]=poww(jc[i],mod-);
cin>>n;
for(int i=;i<=n;i++)cin>>A[i],C[++cnt]=A[i],ta[A[i]]++;
for(int i=;i<=n;i++)cin>>B[i],C[++cnt]=B[i],tb[B[i]]++;
sort(A+,A+n+,cmp);sort(B+,B+n+,cmp);
if(A[]!=B[]){puts("");return ;}
sort(C+,C+cnt+,cmp);cnt=unique(C+,C+cnt+)-C-; LL ans=;
int la=,lb=,na=,nb=;
for(int i=;i<=cnt;i++)
{
int s=C[i];
la=na,lb=nb;
while(na<n&&A[na+]==s)na++;
while(nb<n&&B[nb+]==s)nb++; int a=na-la,b=nb-lb,c=la,d=lb;
LL tem=;
for(int j=;j<=a;j++)
{
f[j]=CC(a,j)*poww( ( poww(s,j) * (poww(s+,a+c-j)-poww(s,a+c-j)%mod) )%mod ,b)%mod*
poww( poww(s,j)*poww(s+,a-j)%mod ,d)%mod;
if(j&)tem-=f[j];else tem+=f[j];
tem=(tem%mod+mod)%mod;
}
ans=(ans*tem)%mod;
}
printf("%lld\n",ans);
}
LL poww(LL a,LL b)
{
a%=mod;LL ans=;
while(b)
{
if(b&)ans=ans*a%mod;
a=a*a%mod;b=b>>;
}
return ans;
}

HZOJ Silhouette的更多相关文章

  1. Qt 3D的研究(十):描边渲染(轮廓渲染)以及Silhouette Shader

    Qt 3D的研究(十):描边渲染(轮廓渲染)以及Silhouette Shader 之前写了两篇文章,介绍了我在边缘检測上面的研究.实际上.使用GPU对渲染图像进行边缘检測.前提是须要进行两遍渲染.前 ...

  2. [CSP-S模拟测试]:Silhouette(数学)

    题目描述 有一个$n\times n$的网格,在每个格子上堆叠了一些边长为$1$的立方体. 现在给出这个三维几何体的正视图和左视图,求有多少种与之符合的堆叠立方体的方案.两种方案被认为是不同的,当且仅 ...

  3. 如何选择kmeans中的k值——肘部法则–Elbow Method和轮廓系数–Silhouette Coefficient

    肘部法则–Elbow Method 我们知道k-means是以最小化样本与质点平方误差作为目标函数,将每个簇的质点与簇内样本点的平方距离误差和称为畸变程度(distortions),那么,对于一个簇, ...

  4. csp-s模拟测试59(10.4)「Reverse」(set)·「Silhouette」(容斥)

    A. Reverse 菜鸡wwb又不会了..... 可以线段树优化建边,然而不会所以只能set水了 发现对于k和当前反转点固定的节点x确定奇偶性所到达的节点奇偶性是一定的 那么set维护奇偶点,然后每 ...

  5. Cesium源码剖析---Post Processing之物体描边(Silhouette)

    Cesium在1.46版本中新增了对整个场景的后期处理(Post Processing)功能,包括模型描边.黑白图.明亮度调整.夜视效果.环境光遮蔽等.对于这么炫酷的功能,我们绝不犹豫,先去翻一翻它的 ...

  6. hzoj 2301(莫比乌斯反演)

    题意 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公 数. 思路: 与先前的那个相比,这次a,c并不一定 ...

  7. HZOJ 单

    两个子任务真的是坑……考试的时候想到了60分的算法,然而只拿到了20分(各种沙雕错,没救了……). 算法1: 对于测试点1,直接n遍dfs即可求出答案,复杂度O(n^2),然而还是有好多同学跑LCA/ ...

  8. 20191102 「HZOJ NOIP2019 Round #12」20191102模拟

    先开坑. md原题写挂我也真是... 100+20+10 白夜 打表大法吼 显然,不在环上的点对答案的贡献是 \((k-cycle)^{k-1}\) . 打表得到环上的递推式,矩阵一下乘起来就好了. ...

  9. 20191004 「HZOJ NOIP2019 Round #9」20191004模拟

    综述 第一次 rk1 ,激动. 题目是 COCI 18/19 Round #1 的三至五题. 得分 \(100+100+20\) \(\mathrm{cipele}\) 问题描述 HZOJ1313 题 ...

随机推荐

  1. Leetcode405Convert a Number to Hexadecimal数字转换为十六进制数

    给定一个整数,编写一个算法将这个数转换为十六进制数.对于负整数,我们通常使用 补码运算 方法. 注意: 十六进制中所有字母(a-f)都必须是小写. 十六进制字符串中不能包含多余的前导零.如果要转化的数 ...

  2. springboot之jpa(简述)

    1.maven引入jar包(jpa和mysql) <dependency> <groupId>org.springframework.boot</groupId> ...

  3. windows远程连接linux-安装xfce界面,ubuntn添加新用户

    参考:“ 使用xrdp实现windows 远程桌面连接linux”   http://blog.csdn.net/qq_33530388/article/details/64502902; http: ...

  4. Django项目:CRM(客户关系管理系统)--46--38PerfectCRM实现全局账号登录注销01

    python.exe manage.py startapp gbacc #urls.py """PerfectCRM URL Configuration The `url ...

  5. 深度优先搜索(Depth-First-Search)精髓

    引例:迷宫问题 首先我们来想象一只老鼠,在一座不见天日的迷宫内,老鼠在入口处进去,要从出口出来.那老鼠会怎么走?当然可以是这样的:老鼠如果遇到直路,就一直往前走,如果遇到分叉路口,就任意选择其中的一条 ...

  6. Docker 私有仓库下载镜像

    1.添加私有仓库路径 vim /etc/sysconfig/docker --insecure-registry 192.168.105.30:5000 注:版本差异 2.下载镜像 docker pu ...

  7. 在Mac下安装MySQL

    在Mac下安装MySQL   最近开始将开发工具都转移到 Mac 上了,其中也会莫名其妙的遇到一些坑,不如干脆将整个流程都记录下来,方便以后查找. 下载与安装 首先进入 MySQL 官网,选择免费的C ...

  8. python基础--魔法方法、迭代器、上下文管理

    isinstance:判断一个对象是否是某个类的实例 参数一:要判断的对象 参数二:要判断的类型 issubclass:判断一个类是否是另一个类的子类 参数一:是待判断的子类 参数二:待判断的父类 _ ...

  9. Leetcode74. Search a 2D Matrix搜索二维矩阵

    编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 1: 输入: matrix ...

  10. 设置Linux系统的空闲等待时间TMOUT的方法和Linux反空闲设置的两种方法

    为了增强linux系统的安全性,我们需要在用户输入空闲一段时间后自动断开,这个操作可以由设置TMOUT值来实现.将以下字段加入到/etc/profile 中即可(对所有用户生效). export TM ...