异或题思考方向:01trie树,分治
2. 二分图最大匹配,最大独立集互相转换
3. Snow
4.
Code
5.
Code
6.
Code
7. 题目
#include<iostream>
#include<cstdio>
using namespace std;
const int N=100010;
int n,p,nxt[N],no[200];
char s[N];
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&p);nxt[i]=i-p;}s[1]='a';for(int i=2;i<=n;i++){if(nxt[i]) s[i]=s[nxt[i]];else{for(int c='a';c<='z';c++) no[c]=0;int j=nxt[i-1];while(j){no[s[j+1]]=1;j=nxt[j];}no[s[j+1]]=1;for(int c='a';c<='z';c++){if(!no[c]){s[i]=c;break;}}}}printf("%s",s+1);return 0;
}
-
AGC019F Yes or No 贪心,期望,网格计数
-
LGV引理求解不相交路径数
-
Many Moves(dp,线段树优化,绝对值处理)
-
给出NNN个序列,有MMM个询问,每个询问给出字符串s1,s2s1,s2s1,s2。我们认为一个序列“拥有”s1,s2s1,s2s1,s2,当且仅当s1s1s1是该序列的前缀的同时,s2s2s2是这个序列的后缀。对于每个询问,求有多少个序列“拥有”s1,s2s1,s2s1,s2。神牛的养成计划 题解
-
http://192.168.102.138/JudgeOnline/problem.php?cid=1811&pid=1
-
跨过pip_ipi的区间容易转化为:以pip_ipi为右端点的区间+++以pi+1p_{i}+1pi+1为左端点的区间
-
正序删边→\to→逆序加边
-
树中的一个点到距离它最远的点的距离 一定是 到直径某个端点的距离
-
拉格朗日插值优化dp
-
求极差:先将所有元素按www值排序,用双指针维护所选元素的最小www值LLL和最大www值RRR,判断是否存在合法方案。题
-
重复覆盖问题 Code
-
线段树优化dp----绝对值/类似绝对值的处理
-
shopping—树上多重背包,点分治优化树形dp 树剖优化dp
-
用折线计数求组合数
-
[ARC083F] Collecting Balls [二分图建模+环套树定向+建拓扑图+树的拓扑序计数]
行列支配类的问题,常见做法就是把行和列变成二分图中的点,把矩阵内元素作为边,转化为图论问题
一棵有nnn个点的树的拓扑序个数:n!∏sz[i]\dfrac{n!}{\prod sz[i]}∏sz[i]n! -
fail树
-
社保—拓扑序推论 题
把强连通分量缩成点,跑拓扑,假设当前跑到u,此时未删掉的点组成的图中,若有点(u除外)的入度为0,则u一定到不了该点(即使把所有边反向也到不了),否则u在边反向时能够到达拓扑序比它小的所有点。
-
摸鱼 经典贪心-----给你一个1-n的排列,要你把这个排列分成两个序列,且这个两个序列都满足单调性。
-
求最长子序列使得该序列的任意三个相邻元素,中间的元素是三个中最大的或者最小的----贪心/dp
-
地中海气候(思维)
-
分段,求每段极值和的最大值
-
count(笛卡尔树,生成函数,卡特兰数)
-
断环利器:高斯消元
-
妹子—线段树上二分—>sequence(分块,线段树)
-
【XSY3333】魔力(差分,哈希)
-
保证∀i,ai≥0\forall i,a_i\geq 0∀i,ai≥0,维护区间内ai=0a_i=0ai=0的个数相当于维护区间内aia_iai的最小值的个数
-
折半枚举
-
ppp是nnn的一个排列,则iii向pip_ipi连边,每个点的入度出度都为1 ,形成若干个环
-
至少删多少个叶子结点(保证剩下的仍是棵树)才能使树的直径<=k。
-
笛卡尔树
-
线段树分治维护时间轴
-
不重不漏地枚举一个字符串的所有本质不同子序列