bzoj2084/luoguP3501 [Poi2010]Antisymmetry(回文自动机+dp) bzoj Luogu 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作"反对称"字符串.比如00001111和010101就是反对称的,1001就不是. 现在给出一个长度为N的01字符串,求它有多少个子串是反对称的. 题解时间 这玩意咋看都像是回文串不是嘛. 然后与此同时还是经典计数问题. 所以考虑能不能以这里面的这个规则写个PAM 发现还真能搞:…
题目描述 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串.比如00001111和010101就是反对称的,1001就不是.现在给出一个长度为N的01字符串,求它有多少个子串是反对称的. 输入 第一行一个正整数N (N <= 500,000).第二行一个长度为N的01字符串. 输出 一个正整数,表示反对称子串的个数. 样例输入 8 11001011 样例输出 7 hint 7个反对称子串分别是:01(出现两次), 10(出现两次), 0101,…
manacher魔改,hash+二分都好写,但是我魔改了个回文自动机就写自闭了orz 根本上来说只要把==改成!=即可,但是这样一来很多停止条件就没了,需要很多特判手动刹车,最后统计一下size即可 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=500005; int n,ch[N][2],fa[N],dis[N],si[N],con=1,la…
题目: Description 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作"反对称"字符串.比如00001111和010101就是反对称的,1001就不是. 现在给出一个长度为N的01字符串,求它有多少个子串是反对称的. Input 第一行一个正整数N (N <= 500,000).第二行一个长度为N的01字符串. Output 一个正整数,表示反对称子串的个数. 题解: 首先我们发现这种反对称字符长度一定是偶数 所以我们没有必要维护表示…
2084: [Poi2010]Antisymmetry Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 609  Solved: 387[Submit][Status][Discuss] Description 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串.比如00001111和010101就是反对称的,1001就不是.现在给出一个长度为N的01字符串,求它有多少个子串是反对称的. Input…
题目大意: 你要用ATGC四个字母用两种操作拼出给定的串: 将其中一个字符放在已有串开头或者结尾 将已有串复制,然后reverse,再接在已有串的头部或者尾部 一开始已有串为空.求最少操作次数. len<=100000 题解: 我们一看 ! 这道题跟回文自动机没有半毛钱关系啊 !! 仔细分析一下第二个操作,我们发现这个操作过后实际上就产生了一个大回文串 所以我们可以考虑如何在回文自动机上搞 一开始想歪了,一直倒着想:如何把给定字符串消掉,然后一直没有想出来 其实这道题应该正着想 设\(f_i\)…
题目: Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了.拉拉队是篮球比赛的一个看点,好的拉拉队往往能帮助球队增加士气,赢得最终的比赛.所以作为拉拉队队长的楚雨荨同学知道,帮助篮球队训练好拉拉队有多么的重要.拉拉队的选拔工作已经结束,在雨荨和校长的挑选下,n位集优秀的身材.舞技于一体的美女从众多报名的女生中脱颖而出.这些女生将随着篮球队的小伙子们一起,和对手抗衡,为艾利斯顿篮球队加油助威.一个阳光明媚的早晨,雨荨带领拉拉队的队员们开始了排练.n个女生从左到右排成一行,每个…
题目传送门 需要高级权限的传送门 题目大意 要求用两种操作拼出一个长度为$n$的只包含'A','T','G','C'的字符串 在当前字符串头或字符串结尾添加一个字符 将当前字符串复制,将复制的串翻转,接在当前字符串末尾或者当前字符串头部. 问最少的操作次数. 考虑正常的动态规划时怎么做的.用$f[i][j]$表示拼出给定串的$[l, r]$的最少用的步数.转移显然. 然而它的时间爆了.空间也爆了. 仔细观察发现,翻转完最后一个偶回文串后,两端的字符只能暴力插入. 但是一个串的本质不同的回文串的总…
题目大意: 你可以在一个串的开头或者末尾加入一个字符,或者把当前整个串$reverse$,然后接在前面或者后面,求达到目标串需要的最少操作次数 对目标串建出$PAM$ 定义$dp[x]$表示当前在回文树的x节点,拼凑出这个节点表示的回文串所需要的最小操作次数 $fa_{x}$表示沿着树边指向它的父亲,$pre_{x}$表示它的$fail$指针 如果它是奇回文串,一定不能被翻转得到,所以开头结尾各需要加上一个字符,$dp[x]=dp[fa_{x}]+2$ 如果它是偶回文串,可以被翻转得到 1.要么…
Sol Manacher. \(O(n)\) Manacher很简单啊.改一改转移就可以了. 然后我WA了.一开始天真的认为id只会是奇数,然后就GG. 一组 Hack 数据 3 1 0 0 然后就跳过偶数的拓展...就过了... Code /************************************************************** Problem: 2084 User: BeiYu Language: C++ Result: Accepted Time:24…