题目

不难猜到或者发现的性质,如果连了一条对角线划分出了奇数个点,那么这条对角线肯定不合法;因为划分成三角形就不可能有对角线相交,于是划分成奇数的那一边怎么样也不可能划分成全是偶数

于是我们需要对每一条对角线求,有多少条个点在它上面,直接暴力枚举对角线用叉积来判是\(O(n^2m)\)的,显然过不去的样子;不难发现这个问题具有一定的单调性,对于一个点\(i\),求凸包上其他点\(j\)和\(i\)所连对角线的划分情况,我们可以顺时针枚举点\(j\),不难发现如果一个点在\((i,j-1)\)这条边以上,那么也肯定在\((i,j)\)以上,于是我们以点\(i\)为原点跑一边奇角排序,之后开个指针扫一扫就好了

之后求方案数就比较简单了,这是一个凸多边形的弦划分问题,可以大力区间\(dp\)

设\(g_{l,r}\)表示区间\([l,r]\)的合法划分数

那么就有\(g_{l,r}=\sum_{i=l+1}^{r-1}[f_{l,i}=1][f_{i,r}=1]g_{l,i}\times g_{i,r}\)

\(f_{l,i}=1\)表示这条对角线合法

复杂度是\(O(nm\log m+n^3)\),代码

#include<bits/stdc++.h>
#define vt pt
#define re register
inline int read() {
char c=getchar();int x=0,r=1;while(c<'0'||c>'9') {if(c=='-') r=-1;c=getchar();}
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x*r;
}
const int maxn=603;
struct pt {int x,y;}a[maxn],b[200005];
int n,m,mod,nw;
int f[maxn][maxn],g[maxn][maxn],vis[maxn][maxn];
inline int qm(int x) {return x>=mod?x-mod:x;}
inline int crs(pt A,pt B) {return A.x*B.y-A.y*B.x;}
inline vt operator-(const pt A,const pt B) {return (vt){A.x-B.x,A.y-B.y};}
inline int cmp(const vt A,const vt B) {return crs(A-a[nw],B-a[nw])<0;}
int dfs(int l,int r) {
if(vis[l][r]) return g[l][r];
vis[l][r]=1;
for(re int i=l+1;i<r;i++)
if(!(f[l][i]|f[i][r])) g[l][r]=qm(g[l][r]+dfs(l,i)*dfs(i,r)%mod);
return g[l][r];
}
int main() {
n=read(),m=read(),mod=read();
for(re int i=1;i<=n;i++) a[i].x=read(),a[i].y=read();
for(re int i=1;i<=m;i++) b[i].x=read(),b[i].y=read();
for(re int i=1;i<=n;i++) {
nw=i;std::sort(b+1,b+m+1,cmp);int tot=0;
for(re int j=i+1;j<=n;j++) {
while(tot<m&&crs(a[j]-a[i],b[tot+1]-a[i])>=0) ++tot;
f[i][j]=f[j][i]=(tot&1);
if(tot&&crs(a[j]-a[i],b[tot]-a[i])==0) f[i][j]=f[j][i]=1;
}
}
for(re int i=1;i<n;i++) g[i][i+1]=1,vis[i][i+1]=1;
printf("%d\n",dfs(1,n));
return 0;
}

[POI2010]OWC-Sheep的更多相关文章

  1. 【BZOJ2087】[Poi2010]Sheep 几何+DP

    [BZOJ2087][Poi2010]Sheep Description Lyx的QQ牧场养了很多偶数个的羊,他是Vip,所以牧场是凸多边形(畸形).现在因为他开挂,受到了惩罚,系统要求他把牧场全部分 ...

  2. BZOJ2087 : [Poi2010]Sheep

    一条边能连上当且仅当它没有经过任何点,并且两边的点都是偶数个. 枚举原点,通过极角排序求出哪些边是合法的,然后区间DP即可. 时间复杂度$O(nm\log m+n^3)$. #include<c ...

  3. bzoj 2087: [Poi2010]Sheep【凸包+极角排序+dp】

    首先处理处理出来哪些边能连--能把羊分成两个偶数部分的,实现是在凸包上枚举极点,极角排序,枚举凸包上点对判断两边羊的个数的奇偶即可,设可以连边为v[i][j]=1 然后设f[i][j]为从i到j个凸包 ...

  4. POI2010题解

    POI2010题解 我也不知道我为什么就开始刷POI了 有些题目咕掉了所以不完整(我都不知道POI到底有多少题) [BZOJ2079][Poi2010]Guilds (貌似bz跟洛谷上的不是一个题?) ...

  5. BZOJ 2080: [Poi2010]Railway 双栈排序

    2080: [Poi2010]Railway Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 140  Solved: 35[Submit][Statu ...

  6. 2001. Counting Sheep

      After a long night of coding, Charles Pearson Peterson is having trouble sleeping. This is not onl ...

  7. hdu 3046 Pleasant sheep and big big wolf 最小割

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3046 In ZJNU, there is a well-known prairie. And it a ...

  8. 【BZOJ】【2084】【POI2010】Antisymmetry

    Manacher算法 啊……Manacher修改一下就好啦~蛮水的…… Manacher原本是找首尾相同的子串,即回文串,我们这里是要找对应位置不同的“反回文串”(反对称?233) 长度为奇数的肯定不 ...

  9. BZOJ2086: [Poi2010]Blocks

    题解: 想了想发现只需要求出最长的一段平均值>k即可. 平均值的问题给每个数减去k,判断是否连续的一段>0即可. 然后我们发现如果i<j 且 s[i]<s[j],那么 j 对于 ...

  10. 【DFS深搜初步】HDOJ-2952 Counting Sheep、NYOJ-27 水池数目

    [题目链接:HDOJ-2952] Counting Sheep Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

随机推荐

  1. div中的div上下居中

    方法1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 .parent {           width:800px;           height:500px;       ...

  2. 54.Counting Bits( 计算1的个数)

    Level:   Medium 题目描述: Given a non negative integer number num. For every numbers i in the range 0 ≤ ...

  3. SpringMVC学习(7):格式化显示

    在系列(6)中我们介绍了如何验证提交的数据的正确性,当数据验证通过后就会被我们保存起来.保存的数据会用于以后的展示,这才是保存的价值.那么在展示的时候如何按照要求显示?(比如:小数保留一定的位数,日期 ...

  4. HttpClient 之 4.x.x版本以上的发送Https请求

    https请求比http更安全 是在http的基础上加了SSL数据加密协议. http的连接很简单,是无状态的:HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,比htt ...

  5. JavaScript学习笔记(基础部分)

    一.JavaScript简介: 概念:JavaScript是一种解释性的.跨平台的.基于对象的脚本语言,一般用于客户端来给HTML页面增加动态的功能. 组成: 1.ECMAScript,描述了该语言的 ...

  6. 【问题解决方案】git/github本地和远程仓库的重命名

    参考: CSDN博文:在Github上重命名仓库 背景: 偶然终于看到一条规范里写着: "通常(注意是通常,尤其是 Web 相关的项目) repo 的命名用小写英文,多个字母之间用连字符(比 ...

  7. java -jar 中文乱码

    java -Dfile.encoding=utf-8 -jar demo.jar 添加编码即可

  8. AtCoder Beginner Contest 130 F Minimum Bounding Box 三分法求极值(WA)

    题意:给n个点的起始坐标以及他们的行走方向,每一单位时间每个点往它的方向移动一单位.问最小能包围所有点的矩形. 解法:看到题目求极值,想了想好像可以用三分法求极值,虽然我也不能证明面积是个单峰函数. ...

  9. 十、设计模式之代理(Proxy)模式

    什么是代理模式 代理模式是对象的结构模式,为其他对象提供一种对象以控制对这个对象的访问. 代理模式的结构图如下:(源自大话设计模式)   Subject:定义了RealSubject和Proxy的公共 ...

  10. pdfminer实现pdf布局分析 python (pdfminer realize layout analysis with PDF python)

    使用pdfminer实现pdf文件的布局分析 python 参考资料: https://github.com/euske/pdfminer https://stackoverflow.com/ques ...