昨天不该早点走的.... 首先操作限制实际上是一个回文限制 每个$b[i] - b[i - 1]$互不干扰,不妨设这个串关于中心点对称的这么一对区间的串分别为$(S_1, S_2)$ 题目的限制相当与存在$(T_1, T_2)$使得$T_1 = inv(S_2) \;and\;T_2 = inv(S_1)$ 考虑一对串$(S_1, S_2)$被计数多少次,我们分类讨论一下 一个长为$L$的子串的方案数为$S^L$,即为$f(L)$ 一个长为$L$,字符集为$S$的区间,形成回文串的方案数为$S^…
题目链接 题意 限定字符串长度为$n$,字符集规模为$A$,以及$m$个数字$b$,对于任意数字$bi$满足长度为$bi$的前缀和后缀先反转再交换位置后形成的新串与原串视作相等,问存在多少不同串. 思路 设$c[i]=b[i]-b[i-1]$,将字符串看成由长度$c[1],c[2],c[3]...n-2*b[m]...c[3],c[2],c[1]$串构成,那么只需考虑$c$中对应串的方案数和中间单独的方案数,相乘即答案. 假设考虑$k$位,形成回文的对应串有$A^{k}$,不形成的有$\frac…
原文链接https://www.cnblogs.com/zhouzhendong/p/9074164.html 题目传送门 - Codeforces 980D 题意 $\rm Codeforces$ 真是个令人伤心的地方. 伤心的 $zzd$ 现在给你一个含有 $n$ 个数字元素的数列. $zzd$ 问你对于 $1$ 到 $n$ 之间的每一个 $k$ 满足 $Q(序列)=k$ 的原序列的连续子序列个数. 其中,$Q()$定义如下: 把当前数列中的数分组,使得同组中任意两个数的乘积为完全平方数.其…
题目链接: http://codeforces.com/problemset/problem/57/C 题意: 给你一个数n,表示有n个数的序列,每个数范围为[1,n],叫你求所有非降和非升序列的个数. 题解: 由于对称性,我们只要求非降序的个数就可以了(n个数全部相等的情况既属于非升也属于非降) 我们在满足条件的n个数之前加一个虚节点1,在第n个数之后加一个虚节点n,那么考虑这n+2个数组成的非降序列: 假设序列里的第i个数为a[i],我们设xi=a[i+1]-a[i]+1,1<=i<=n+…
B. Word Cut   Let's consider one interesting word game. In this game you should transform one word into another through special operations. Let's say we have word w, let's split this word into two non-empty parts x and y so, that w = xy. A split oper…
大意: 给定无向图, 无偶环, 每次询问求[l,r]区间内, 有多少子区间是二分图. 无偶环等价于奇环仙人掌森林, 可以直接tarjan求出所有环, 然后就可以预处理出每个点为右端点时的答案. 这样的话区间询问等价于区间求和, 特殊处理一下左右边界的环即可. 要注意同一个点可能属于多个环!! #include <iostream> #include <iostream> #include <algorithm> #include <cstdio> #incl…
大意:给定树, 每个点有颜色, 一个合法的边集要满足删除这些边后, 每个连通块内颜色仅有一种, 求所有合法边集的个数 $f[x][0/1]$表示子树$x$中是否还有与$x$连通的颜色 对于每种颜色已经确定了一个连通块, 连通块内部一定不能断边, 有转移 $$f[x][1]=\prod (f[y][0]+f[y][1]),f[x][0]=0$$ 能断边的部分只能为不同颜色连通块间的无色结点, 有转移 $$f[x][0]=\prod (f[y][0]+f[y][1]), f[x][1]=\sum\l…
大意:给定字符串$s$, 保证长度为偶数, 给定q个询问, 每次询问给定两个位置$x$,$y$, 可以任意交换字符, 要求所有字符$s[x],s[y]$在同一半边, 剩余所有同种字符在同一半边的方案数 注意到询问数虽然是1e5, 但有效的只有$52^2$, 考虑预处理出$52^2$后O(1)回答. 假设两半的字符种类已经定好, 那么种类数就为$2\frac{(n/2)!^2}{\prod\limits_{i} (c_i!)}$. 考虑如何分配每一半的字符, 若对$s[x],s[y]$所在的半边$…
大意: 给定无向图, 求任意两点间所有最短路经过的边数 刚开始想先用floyd跑出最短路, 然后在DAG上DP, 交了1发, 发现会算重复 贴一下题解的做法 #include <iostream> #include <algorithm> #include <cstdio> #define REP(i,a,n) for(int i=a;i<=n;++i) using namespace std; const int N = 510, INF = 0x3f3f3f3…
一开始发现的性质是确定了第一行后,后面的行只需要考虑和前面的行相同或者不同,整个过程只需要考虑行,构出的图一定符合性质(即同样满足列的性质),但是接下来死活定义不出状态,事实证明自己还是想的太少了 思路:https://www.cnblogs.com/tobyw/p/9513876.html 代码: #include<bits/stdc++.h> #define ll long long #define mk make_pair #define ft first #define se seco…