一条边能连上当且仅当它没有经过任何点,并且两边的点都是偶数个。

枚举原点,通过极角排序求出哪些边是合法的,然后区间DP即可。

时间复杂度$O(nm\log m+n^3)$。

#include<cstdio>
#include<algorithm>
const int N=610,M=20010;
int n,m,P,cnt,i,j,k,t,now,f[N][N];bool g[N][N],v[N][N];
struct vec{
int x,y,p;
vec(){}
vec(int _x,int _y){x=_x,y=_y;}
vec operator-(const vec&b){return vec(x-b.x,y-b.y);}
}a[N],b[M],c[N+M],O;
inline int cross(vec a,vec b){return a.x*b.y-a.y*b.x;}
inline bool cmp(vec x,vec y){return cross(x-O,y-O)<0;}
int dp(int l,int r){
if(l+1==r)return 1;
if(v[l][r])return f[l][r];
v[l][r]=1;
int&t=f[l][r];
for(int i=l+1;i<r;i++)if(g[i][l]&&g[i][r])t=(t+dp(l,i)*dp(i,r))%P;
return t;
}
int main(){
scanf("%d%d%d",&n,&m,&P);
for(i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].y);
for(i=1;i<=m;i++)scanf("%d%d",&b[i].x,&b[i].y);
O=a[1];
std::sort(a+2,a+n+1,cmp);
for(i=1;i<=n;i++)a[i].p=i;
for(i=1;i<=n;i++){
O=a[i];
cnt=0;
for(j=1;j<=n;j++)if(j!=i)c[++cnt]=a[j];
for(j=1;j<=m;j++)c[++cnt]=b[j];
std::sort(c+1,c+cnt+1,cmp);
for(j=1,t=0;j<=cnt;j=k){
for(now=0,k=j;k<=cnt&&!cross(c[k]-O,c[j]-O);k++)if(!c[k].p)now++;
if(!now&&!t)for(k=j;k<=cnt&&!cross(c[k]-O,c[j]-O);k++)if(c[k].p)g[i][c[k].p]=g[c[k].p][i]=1;
t^=now&1;
}
}
return printf("%d",dp(1,n)),0;
}

  

BZOJ2087 : [Poi2010]Sheep的更多相关文章

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

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

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

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

  3. POI2010题解

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

  4. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  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 对于 ...

随机推荐

  1. 不把C作为第一门语言是个好主意么

    ----------------------------------------------------------------------------------   不把C作为第一门语言是个好主意 ...

  2. J2EE学习路线图

    一:J2SE 面向对象-封装.继承.多态 内存的分析 递归 集合类.泛型.自动打包与解包.Annotation IO 多线程.线程同步 TCP/UDP AWT.事件模型.匿名类 正则表达式 反射机制 ...

  3. 10月28日上午 PHP数据访问

    1.建一个连接(连接PHP和MYSQL) $db = new MySQLi("localhost","root","666","t ...

  4. PHP 连接 MySQL

    PHP 连接 MySQL PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP Dat ...

  5. solr-web界面增加登录认证

    目录 配置tomcat-user.xml 配置web.xml 界面展示 回到顶部 配置tomcat-user.xml 找到 tomcat 下 conf 文件下增加 tomcat-user.xml &l ...

  6. jQuery入门(2)使用jQuery操作元素的属性与样式

    jQuery入门(1)jQuery中万能的选择器 jQuery入门(2)使用jQuery操作元素的属性与样式 jQuery入门(3)事件与事件对象 jQuery入门(4)jQuery中的Ajax()应 ...

  7. 【PHP升级】CentOS6.3编译安装 PHP5.4.38

    先前安装的PHP5.3.28(参考:CentOS6.3编译安装Nginx1.4.7 + MySQL5.5.25a + PHP5.3.28),现在准备升级PHP到5.4.38,有如下几个地方需要重新编译 ...

  8. 第三次个人作业—“K米”评测

    第一部分 调研,评测 评测 1.上手体验: 软件欢迎界面,色彩对比鲜明,前三图深色调,最后一条则充满了艳丽的色彩,让人对这个产品突然充满了期待. 软件界面加载速度慢,很多地方点击进去要等好久才能出现界 ...

  9. 可以正确显示表格线的Grid item view

    Android上要显示一个表格,没有Swing那么专门的JTable可用. 搜了下,一般用GridView,有诸多不便和需要自己实现的地方: 跟ListView一样的Adapter,getView的时 ...

  10. 文本框value联动修改

    <input id="ipt-edit" value="" /><input id="ipt-target" value= ...