【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() { ,pos = ; ; ]; ]; len = strlen(s+); ; i <= len; i++) { t…
# 2452. 「POI2010」反对称 Antisymmetry [题目描述] 对于一个 $0/1$ 字符串,如果将这个字符串 $0$ 和 $1$ 取反后,再将整个串反过来和原串一样,就称作「反对称」字符串.比如 $00001111$ 和 $010101$ 就是反对称的,而 $1001$就不是. 现在给出一个长度为 $n$ 的 $0/1$ 字符串,求它有多少个子串是反对称的,注意这里相同的子串出现在不同的位置会被重复计算. [算法] 0\1取反和对称操作的前后顺序显然不影响,先考虑对称操作再考…
题目: 对于一个 $0/1$ 字符串,如果将这个字符串 $0$ 和 $1$ 取反后,再将整个串反过来和原串一样,就称作「反对称」字符串.比如 $00001111$ 和 $010101$ 就是反对称的,而 $1001$ 就不是.现在给出一个长度为 $n$ 的 $0/1$ 字符串,求它有多少个子串是反对称的,注意这里相同的子串出现在不同的位置会被重复计算. $n\le 5\times 10^5$ 分析: ①显然,反对称字符串的长度一定是偶数. 因为若不是偶数,中间的那个数取反永远不会等于自己. ②若…
\(\\\) \(Description\) 给出一个长度为 \(N\) 的二进制串,定义一个子串是优秀的,当且仅当其正着看,和倒着按位取反后看结果是一样的,求整个串有多少个优秀的子串. \(N\le 5\times10^5\) \(\\\) \(Solution\) 挺好的一道 \(Manacher\) 变式题. 考虑合法的串满足的条件: 首先因为要按位取反,所以一定不存在奇数长度的合法解,因为对称轴的那个字符取反后一定不等于原来的字符. 然后考虑反序的过程,如果没有按位取反实际上这就是一个回…
题目描述 对于一个 \(0/1\) 字符串,如果将这个字符串 \(0\) 和 \(1\) 取反后,再将整个串反过来和原串一样,就称作「反对称」字符串.比如 \(00001111\) 和 \(010101\) 就是反对称的,而 \(1001\) 就不是. 现在给出一个长度为 \(n\) 的 \(0/1\) 字符串,求它有多少个子串是反对称的,注意这里相同的子串出现在不同的位置会被重复计算. 输入格式 第一行一个正整数 \(n\) . 第二行一个长度为 \(n\) 的 \(0/1\) 字符串. 输出…
Description 霸中智力测试机构的一项工作就是按照一定的规则删除一个序列的数字,得到一个确定的数列.Lyx很渴望成为霸中智力测试机构的主管,但是他在这个工作上做的并不好,俗话说熟能生巧,他打算做很多练习,所以他希望你写一个程序来快速判断他的答案是否正确. Input 第一行为一个整数 \(m\): 第二行包括 \(m\) 个用空格分开的整数 \(a_i\),组成了最初的序列: 第三行为一个整数 \(n\),表示 \(n\) 个Lyx经过一系列删除得到的序列,每个序列两行,第一行给出长度…
题面 正反各做一遍哈希来判断,然后在两个哈希值里取一个$max/min$做哈希值,然后每次把子串们的哈希插进$set$里,最后统计集合大小,就可以优秀地在$O(nlog^2$ $n)$中出解了 然后我觉得这样太没有理想了,就写了一个挂链哈希表,结果跑的贼慢... 我挂链时的区分方法是换模数再模出一个新值,然后这样做的时候注意要和哈希表的基数和模数区分开 #include<cstdio> #include<cstring> #include<algorithm> usin…
[题目链接] 点击打开链接 [算法] 单调队列 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 3000010 int n,k,i,ans,pos; deque< int > q1,q2; int a[MAXN]; int main() { scanf("%d%d",&k,&n); ; i <= n; i++) scanf("%d",&…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2093 先处理出每个点第一次会跳到哪里: 开一个长度为 K+1 的窗口(因为第一近的实际是自己),那么只会跳到左端点或右端点: 然后根据左右端点到下一个位置的距离,调整窗口位置: 然后就可以倍增跳了! 但需要微妙地卡一卡时间,可以边处理 m 算答案边倍增,然后就能过了. 代码如下: #include<iostream> #include<cstdio> #include<…
题目链接 戳我 \(Solution\) 看到"最大值最小",就知道应该要二分 二分之后,对于每个\(mid\),只要计算小于\(mid\)的边,然后在剩下的图中判断有无欧拉回路 但这个图是一个混合图. 先对每条无向边随意的定向,统计每个点入度和出度的差,如果有一个点的入度和出度的奇偶性不同,那么就肯定无解(而改变无向边方向的话,会让它们的入读\(-\)出度变化\(2\),则他们的差无法变为\(0\),所以无法相同) 如果入度\(-\)出度\(=x\),若\(x < 0\),就向…