BZOJ1100 : [POI2007]对称轴osi
将多边形转化为如下的环:
1到2的边,角2,2到3的边,角3,...,n-1到n的边,角n,n到1的边,角1
然后枚举对称轴,如果i是对称轴,那么[i-n,i+n]是一个回文串
用Manacher算法实现即可。
时间复杂度$O(n)$。
#include<cstdio>
#define N 100010
typedef long long ll;
int T,n,i,r,p,f[N<<2],ans;
struct P{
int x,y;
P(){x=y=0;}
P(int _x,int _y){x=_x,y=_y;}
inline P operator-(P b){return P(x-b.x,y-b.y);}
}a[N];
inline ll sqr(ll x){return x*x;}
inline ll dis(P a,P b){return sqr(a.x-b.x)+sqr(a.y-b.y);}
inline ll cross(P a,P b){return (ll)a.x*b.y-(ll)a.y*b.x;}
struct Q{
ll x;int y;
Q(){x=y=0;}
Q(ll _x,int _y){x=_x,y=_y;}
inline bool operator==(Q b){return x==b.x&&y==b.y;}
}b[N<<2];
inline int min(int a,int b){return a<b?a:b;}
inline void read(int&a){
char c;bool f=0;a=0;
while(!((((c=getchar())>='0')&&(c<='9'))||(c=='-')));
if(c!='-')a=c-'0';else f=1;
while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';
if(f)a=-a;
}
int main(){
for(read(T);T--;printf("%d\n",ans>>1)){
read(n);
for(i=1;i<=n;i++)read(a[i].x),read(a[i].y);
a[n+1]=a[1],a[n+2]=a[2];
for(i=1;i<=n;i++){
b[i*2-1]=Q(dis(a[i],a[i+1]),1);
b[i*2]=Q(cross(a[i+1]-a[i],a[i+1]-a[i+2]),2);
}
for(i=1;i<=n*2;i++)b[i+n*2]=b[i];
b[n*4+1]=Q(0,3);
for(r=p=0,i=1;i<=n*4;i++){
for(f[i]=r>i?min(r-i,f[p*2-i]):1;b[i-f[i]]==b[i+f[i]];f[i]++);
if(i+f[i]>r)r=i+f[i],p=i;
}
for(ans=0,i=n+1;i<=n*3;i++)if(f[i]>n)ans++;
}
return 0;
}
BZOJ1100 : [POI2007]对称轴osi的更多相关文章
- BZOJ 1100: [POI2007]对称轴osi
1100: [POI2007]对称轴osi Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 630 Solved: 243[Submit][Statu ...
- bzoj 1100 [POI2007]对称轴osi manacher
[POI2007]对称轴osi Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 771 Solved: 307[Submit][Status][Dis ...
- 【BZOJ】1100: [POI2007]对称轴osi
题意 给一个\(n(1 \le n \le 100000)\)个点不自交的多边形,求对称轴数目. 分析 将多边形表示成长度和角的形式(用有向面积来表示角也行),然后匹配. 题解 匹配可以用kmp或ma ...
- [POI2007]对称轴osi
Description FGD小朋友--一个闻名遐迩的年轻数学家--有一个小MM,yours.FGD小朋友非常喜欢他的MM,所以他很乐意帮助他的MM做数学作业.但是,就像所有科学的容器一样,FGD的大 ...
- bzoj 1100: [POI2007]对称轴osi 思维
特别神的一道题. 有一句话要反复揣摩:题中给的所有点构成一个多边形!! 而且读入还是按照多边形的轮廓读进来的!!! 我们知道,如果对称轴确定的话判定条件是对应角相等且对应边相等. 所以把相邻边夹角和边 ...
- BZOJ_1100_[POI2007]对称轴osi_KMP+计算几何
BZOJ_1100_[POI2007]对称轴osi_KMP+计算几何 Description FGD小朋友——一个闻名遐迩的年轻数学家——有一个小MM,yours.FGD小朋友非常喜欢他的MM,所以他 ...
- [原博客] POI系列(3)
正规.严谨.精妙. -POI BZOJ 1131 : [POI2008]Sta 树形dp吧,让求找一个点使以这个点深度和最小.首先可以随便整出来一棵树,对于每个节点记录down[i]以i为根下面的点的 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 题解-POI2007 OSI-Axes of Symmetry
Problem bzoj1100 题意概要:给定一个简单多边形(不一定凸),求其对称轴数量 数据组数\(\leq 10\),多边形点数\(\leq 10^5\) Solution 这题算是跨界算法的经 ...
随机推荐
- rubycas-client单点登录
(文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) 进行中,未完待续 Ruby 客户端 使用方法0. 在 Gemfile中,加入: gem 'rubyc ...
- java笔试一
JAVA相关基础知识2.String是最基本的数据类型吗?基本数据类型包括byte.int.char.long.float.double.boolean和short.java.lang.String类 ...
- HDOJ 1026 dfs路径保存
#include<cstdio> #include<cstring> #include<cmath> ][]; #define inf 0xffffff int n ...
- Windows上搭个Nginx集群环境玩玩
一.在windows上安装nginx 1.从这里下载nginx的windows版本 2.把压缩文件解压至c盘根目录,并将文件夹重命名成nginx 3.在conf目录下的nginx.conf文件中,指定 ...
- 【SpringMVC】SpringMVC系列12之数据类型转换、格式化、校验
12.数据类型转换.格式化.校验 12.1.数据绑定流程 Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFacto ...
- 基础知识《四》---Java多线程学习总结
本文转载自51cto 一.线程的基本概念简单的说:线程就是一个程序里不同的执行路径,在同一个时间点上cpu只会有一个线程在执行,Java里的多线程是通过java.lang.Thread类来实现的,每个 ...
- 《ASP.NET1200例》ListView控件之修改,删除与添加
aspx <body> <form id="form1" runat="server"> <div> <asp:Lis ...
- Effecvtive C++笔记:让自己习惯C++
条款01:视C++为一个语言联绑 C++的四个语言层次: C:C++是以C为基础的.基本数据类型.语句.预处理器.数组.指针等统统来自C. Oject-Oriented C++:面向对象这一特性包含了 ...
- July 25th, Week 31st Monday, 2016
We will not go quietly into the night. 今夜,我们将奋战到底. We will be the champion. We will not stop fightin ...
- native app
Apache Cordova是PhoneGap贡献给Apache后的开源项目,是从PhoneGap中抽出的核心代码,是驱动PhoneGap的核心引擎.你可以把他想象成类似于Webkit和Google ...