【POI 2010】 Antisymmetry

【题目链接】

https://www.lydsy.com/JudgeOnline/problem.php?id=2084

【算法】

manacher

【代码】

#include<bits/stdc++.h>
using namespace std;
#define MAXN 500010

int n;
char s[MAXN];

inline void Manacher()
{
        int i,len,mx = 0,pos = 0;
        long long ans = 0;
        static char tmp[MAXN<<1];
        static int p[MAXN<<1];
        len = strlen(s+1);
        for (i = 1; i <= len; i++)
        {
                tmp[2*i-1] = ‘#‘;
                tmp[2*i] = s[i];
        }
        tmp[len = 2 * len + 1] = ‘#‘;
        for (i = 1; i <= len; i++)
        {
                if (tmp[i] != ‘#‘)
                {
                        p[i] = 1;
                        continue;
                }
                if (mx > i) p[i] = min(p[2*pos-i],mx-i);
                else p[i] = 1;
                while (i - p[i] >= 1 && i + p[i] <= len && ((tmp[i-p[i]] == ‘#‘ && tmp[i+p[i]] == ‘#‘) || (tmp[i-p[i]] != tmp[i+p[i]]))) p[i]++;
                if (i + p[i] - 1 > mx)
                {
                        mx = i + p[i] - 1;
                        pos = i;
                }
        }
        for (i = 1; i <= len; i++)
        {
                if (tmp[i] == ‘#‘)
                        ans += (long long)(p[i] - 1) / 2;
        }
        printf("%lld\n",ans);
}

int main()
{

        scanf("%d%s",&n,s+1);
        Manacher();

        return 0;

}

原文地址:https://www.cnblogs.com/evenbao/p/9248951.html

时间: 2024-10-04 11:03:04

【POI 2010】 Antisymmetry的相关文章

【POI 2010】反对称 Antisymmetry

题目: 对于一个 $0/1$ 字符串,如果将这个字符串 $0$ 和 $1$ 取反后,再将整个串反过来和原串一样,就称作「反对称」字符串.比如 $00001111$ 和 $010101$ 就是反对称的,而 $1001$ 就不是.现在给出一个长度为 $n$ 的 $0/1$ 字符串,求它有多少个子串是反对称的,注意这里相同的子串出现在不同的位置会被重复计算. $n\le 5\times 10^5$ 分析: ①显然,反对称字符串的长度一定是偶数. 因为若不是偶数,中间的那个数取反永远不会等于自己. ②若

【SDOI 2010】 魔法猪学院

[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1975 [算法] A*求k短路 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 5010 #define MAXM 200010 const double INF = 1e15; int i,tot,n,m,u,v; int head[MAXN],rhead[MAXN]; double dist[MAXN

【SDOI 2010】 古代猪文

[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1951 [算法] 欧拉定理+中国剩余定理 + lucas定理 [代码] #include<bits/stdc++.h> using namespace std; #define MAXD 40000 typedef long long ll; const ll P = 999911659; const ll m[4] = {2,3,4679,35617}; ll i,j,n,q,c

【POI word】使用POI实现对Word的读取以及生成

项目结构如下: 那第一部分:先是读取Word文档 1 package com.it.WordTest; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.FileWriter; 7 import java.io.IOException; 8 import java.io.Writer; 9 i

【POI xlsx】使用POI对xlsx的单元格样式进行设置

涉及到的样式都在代码中有说明: 1 package com.it.poiTest; 2 3 import java.io.FileNotFoundException; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 7 import org.apache.poi.hssf.util.HSSFColor; 8 import org.apache.poi.sl.usermodel.Sheet; 9 import o

百度地图进阶【POI数据检索】

前面学习百度地图的一些基本的用法,这次我们一起来看一看百度地图的检索功能吧 poi检索api的基本用法 百度地图的POI类中共有如下几个方法 PoiBoundSearchOption POI范围内检索参数 PoiCitySearchOption poi城市内检索参数 PoiDetailResult 详情检索结果 PoiDetailSearchOption poi 详情检索参数 PoiNearbySearchOption 附近检索参数 PoiResult poi搜索结果. PoiSearch PO

【SharePoint 2010】将Sharepoint Server 2010部署到WINDOWS 7

1.部署-安装环境: 在这里先说明一下:2007的版本中我们只能装在WINDOWS 2003 SERVER 上,这种限制在2010被彻底打破了.我们可以将它安装在VISTA/WINDOWS 7/SERVER 2008 R2上,这里面只有R2 2008才是真正的生产环境,而前两个只能是程序员的开发环境.由于2008 R2只发布64X的版本,因此暂时在虚机里面还没发安装.我只能装在外面(幸亏是外面的机器是WIN7). 下图是我的安装环境: 下面开始安装(本文中需要的软件下载我会在后面列出来) 前面的

【HDU 2010】水仙花数

http://acm.hdu.edu.cn/showproblem.php?pid=2010 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3.现在要求输出所有在m和n范围内的水仙花数. Solution:水仙花数又称阿姆斯特朗数,没有直接规律,只能暴力求解. 有限数列,打表算了(懒写暴力) 使用在线算法打大表: 1:  1, 2, 3, 4, 5, 6, 7, 8,

【BZOJ 3545】【ONTAK 2010】Peaks &amp; 【BZOJ 3551】【ONTAK 2010】Peaks加强版 Kruskal重构树

sunshine的A题我竟然调了一周!!! 把循环dfs改成一个dfs就可以,,,我也不知道为什么这样就不会RE,但它却是A了,,, 这周我一直在调这个题,总结一下智障错误: 1.倍增的范围设成了n而不是n*2-1,,, 2.重构树的顶点是n*2-1,而我一开始设成了n,,, 3.define里的for3和for4的i--打成i++,,,,,,,,,,,, 4.dfs爆栈了,找CA爷问的编译命令里手动扩栈,真是愚蠢的问题,,,, 比赛时绝不会有太多时间,在这么犯逗就得滚粗了QAQ 3545: #