异或题思考方向: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;
}
-
-
给出 N N N个序列,有 M M M个询问,每个询问给出字符串 s 1 , s 2 s1,s2 s1,s2。我们认为一个序列“拥有” s 1 , s 2 s1,s2 s1,s2,当且仅当 s 1 s1 s1是该序列的前缀的同时, s 2 s2 s2是这个序列的后缀。对于每个询问,求有多少个序列“拥有” s 1 , s 2 s1,s2 s1,s2。神牛的养成计划 题解
-
http://192.168.102.138/JudgeOnline/problem.php?cid=1811&pid=1
-
跨过 p i p_i pi的区间容易转化为:以 p i p_i pi为右端点的区间 + + +以 p i + 1 p_{i}+1 pi+1为左端点的区间
-
正序删边 → \to →逆序加边
-
树中的一个点到距离它最远的点的距离 一定是 到直径某个端点的距离
-
求极差:先将所有元素按 w w w值排序,用双指针维护所选元素的最小 w w w值 L L L和最大 w w w值 R R R,判断是否存在合法方案。题
-
[ARC083F] Collecting Balls [二分图建模+环套树定向+建拓扑图+树的拓扑序计数]
行列支配类的问题,常见做法就是把行和列变成二分图中的点,把矩阵内元素作为边,转化为图论问题
一棵有 n n n个点的树的拓扑序个数: n ! ∏ s z [ i ] \dfrac{n!}{\prod sz[i]} ∏sz[i]n! -
社保—拓扑序推论 题
把强连通分量缩成点,跑拓扑,假设当前跑到u,此时未删掉的点组成的图中,若有点(u除外)的入度为0,则u一定到不了该点(即使把所有边反向也到不了),否则u在边反向时能够到达拓扑序比它小的所有点。
-
断环利器:高斯消元
-
保证 ∀ i , a i ≥ 0 \forall i,a_i\geq 0 ∀i,ai≥0,维护区间内 a i = 0 a_i=0 ai=0的个数相当于维护区间内 a i a_i ai的最小值的个数
-
折半枚举
-
p p p是 n n n的一个排列,则 i i i向 p i p_i pi连边,每个点的入度出度都为1 ,形成若干个环