Description

Luogu3454

BZOJ1100

Solution

把边和角顺次放入一个数组里,如果一个点为中心的回文串的半径大于\(n\),那就一定是一个对称轴。跑一遍manacher就行。

Code

#include <algorithm>
#include <cmath>
#include <cstdio>
using std::max; typedef long double ld;
typedef long long ll;
const int N = 4e5 + 10;
const double eps = 1e-8; struct point {
ll x, y;
point(ll x = 0, ll y = 0) : x(x), y(y) {}
} p[N];
int n, ans[N];
struct state {
double x;
ll md;
state(double x = 0, ll md = 0) : x(x), md(md) {}
bool operator==(const state &a) const {
return md == a.md && fabs(x - a.x) < eps;
}
} f[N]; inline double dis(const point &x, const point &y) {
return sqrt((x.x - y.x) * (x.x - y.x) + (x.y - y.y) * (x.y - y.y));
}
inline double cross(const point &x, const point &y, const point &z) {
return 1.0 * (y.x - x.x) * (z.y - y.y) - 1.0 * (z.x - y.x) * (y.y - x.y);
} int main() {
#ifdef WYXLOCAL
freopen("tmp.in", "r", stdin);
freopen("tmp.out", "w", stdout);
#endif // WYXLOCAL
int t;
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%lld%lld", &p[i].x, &p[i].y);
}
p[0] = p[n];
p[n + 1] = p[1];
for (int i = 0; i < n; ++i) {
f[i * 2] = state(dis(p[i], p[i + 1]), 1);
f[i * 2 + 1] = state(cross(p[i], p[i + 1], p[i + 2]), 2);
}
for (int i = 0; i < n * 2; ++i) f[n * 2 + i] = f[i];
f[n * 4] = state(0, 0);
int mxr = 0, pos = 0;
for (int i = 0; i < 4 * n; ++i) {
if (i < mxr)
ans[i] = std::min(ans[2 * pos - i], mxr - i + 1);
else
ans[i] = 1;
while (ans[i] <= i && f[i + ans[i]] == f[i - ans[i]]) ans[i]++;
if (i + ans[i] - 1 > mxr) {
mxr = i + ans[i] - 1;
pos = i;
}
}
int cnt = 0;
for (int i = 0; i < 4 * n; ++i)
if (ans[i] > n) cnt++;
printf("%d\n", cnt / 2);
}
return 0;
}

[POI2007] OSI-Axes of Symmetry的更多相关文章

  1. 开始做POI啦...

    库 为了效率搞了这么一个库: 现在版本号1.14(一月十四日更新版本囧..) http://pan.baidu.com/s/1c0SoGfu [source] http://pan.baidu.com ...

  2. BZOJ 1100: [POI2007]对称轴osi

    1100: [POI2007]对称轴osi Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 630  Solved: 243[Submit][Statu ...

  3. bzoj 1100 [POI2007]对称轴osi manacher

    [POI2007]对称轴osi Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 771  Solved: 307[Submit][Status][Dis ...

  4. 【BZOJ】1100: [POI2007]对称轴osi

    题意 给一个\(n(1 \le n \le 100000)\)个点不自交的多边形,求对称轴数目. 分析 将多边形表示成长度和角的形式(用有向面积来表示角也行),然后匹配. 题解 匹配可以用kmp或ma ...

  5. BZOJ1100 : [POI2007]对称轴osi

    将多边形转化为如下的环: 1到2的边,角2,2到3的边,角3,...,n-1到n的边,角n,n到1的边,角1 然后枚举对称轴,如果i是对称轴,那么[i-n,i+n]是一个回文串 用Manacher算法 ...

  6. 题解-POI2007 OSI-Axes of Symmetry

    Problem bzoj1100 题意概要:给定一个简单多边形(不一定凸),求其对称轴数量 数据组数\(\leq 10\),多边形点数\(\leq 10^5\) Solution 这题算是跨界算法的经 ...

  7. [POI2007]对称轴osi

    Description FGD小朋友--一个闻名遐迩的年轻数学家--有一个小MM,yours.FGD小朋友非常喜欢他的MM,所以他很乐意帮助他的MM做数学作业.但是,就像所有科学的容器一样,FGD的大 ...

  8. bzoj 1100: [POI2007]对称轴osi 思维

    特别神的一道题. 有一句话要反复揣摩:题中给的所有点构成一个多边形!! 而且读入还是按照多边形的轮廓读进来的!!! 我们知道,如果对称轴确定的话判定条件是对应角相等且对应边相等. 所以把相邻边夹角和边 ...

  9. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

随机推荐

  1. MS SQL为字段添加说明

    以ms sql server 14  v17为例. 如下表dbo.Q中有一个字段'' 首先在数据库的系统存储过程列表中: 找到sys.sp_addextendedproperty,使用这个为字段添加一 ...

  2. nvm Nodejs 版本管理器 安装及配置

    1.如果已安装nodejs请先卸载干净 nodejs:删除C:\Program Files\nodejs 文件夹 npm:删除C:\Users\{用户名}\AppData\Roaming\npm 文件 ...

  3. BundlePhobia

    1.BundlePhobia用于分析npm package的依赖.bundle后的大小.下载速度预估等等,帮助你在引用一个package之前了解引入该package的代价. 2.也可以将项目的pack ...

  4. SpringBoot2.x-笔记(01)

    程序入口 @SpringBootApplication public class SpringbootApplication { public static void main(String[] ar ...

  5. mssql格式化工具——SQL PRETTY PRINTER

    1.mssql版本 mssql格式化工具有4个版本 1.桌面版 2.mssql插件 3.vs插件 4.api 2.下载地址 下载地址:http://www.dpriver.com/dlaction.p ...

  6. source、sh、./执行脚本对变量的影响

    shell脚本中的变量: local一般用于局部变量声明,多在在函数内部使用. shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止. she ...

  7. CF1237F Balanced Domino Placements

    题意 给定一个 \(h\) 行 \(w\) 列的方格图,上面已经放置了一些 \(1\times 2\) 的多米诺骨牌. 我们称一个放置多米诺骨牌的方案是好的,当且仅当任何两个多米诺骨牌不占用相同的行与 ...

  8. ROS学习--RViz使用的要点

    1.RViz文件保存,下次面板打开时,默认展示上一次的配置 2.设置Fixed_Frame很重要,一打开默认配置,就要确认这个参数是否正确配置,不然会出现:激光数据不展示.点pose_initial时 ...

  9. ASP.NET简介及网页基础知识

    ASP:Active Server Page. asp.net属于.NET Framework的一部分,命名空间是System.Web,主要用于网络程序的开发. .net版本演化(asp.net和.n ...

  10. SQL Server database – Error 3743

    Database mirroring must be removed before you drop SQL Server database – Error 3743 If you try to dr ...