传送门 首先显然的,如果 $l$ 能移动,那么 $r$ 一定可以随便移动,如果 $l$ 不动,那么 $r$ 一定不能动 那么我们现在只要考虑 $l$ 的移动即可 考虑找到位置 $k$ 之前的最左边的最小的字符,如果存在,先手可以直接把 $l$ 移过去,那么后手就没得走了 如果不存在,那么先手显然没得移动 所以直接根据每个位置左边最小的字符是否小于当前位置的字符即可判断胜负 #include<iostream> #include<cstdio> #include<algorit…
链接: https://codeforces.com/contest/1220/problem/C 题意: Mike and Ann are sitting in the classroom. The lesson is boring, so they decided to play an interesting game. Fortunately, all they need to play this game is a string s and a number k (0≤k<|s|). A…
A. Substring and Subsequence 题目连接: http://codeforces.com/contest/163/problem/A Description One day Polycarpus got hold of two non-empty strings s and t, consisting of lowercase Latin letters. Polycarpus is quite good with strings, so he immediately w…
http://codeforces.com/problemset/problem/163/A?mobile=true 题目大意:给出两个串,问a的连续子串和b的子串(可以不连续)相同的个数. 思路:在LCS上加点改动 #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<iostream> ; ],b[]; ][]; int read(){…
919D - Substring 思路: 拓扑排序判环+DAG上dp+记忆化搜索 状态:dp[i][j]表示以i为起点的路径中j的最大出现次数 初始状态:dp[i][j]=1(i have no son && w[i]==j) dp[i][j]=0(i have no son && w[i]!=j) 状态转移:dp[i][j]=max(dp[t][j])(t is i's son) dp[i][j]++(w[i]==j) 代码: #include<bits/stdc+…
题目链接:http://codeforces.com/problemset/problem/163/A 题意: 给你两个字符串a,b,问你有多少对"(a的子串,b的子序列)"可以匹配. 题解: 表示状态: dp[i][j] = pairs a的子串以a[i]结尾,b的子序列以b[1 to j]结尾的方案数. 找出答案: ans = ∑ dp[i][lb] (la,lb代表a和b的长度) 如何转移: dp[i][j] = dp[i][j-1] if(a[i] == b[j]) dp[i]…
题目:Substring 题意:给你一个有向图, 一共有n个节点 , m条变, 一条路上的价值为这个路上出现过的某个字符最多出现次数, 现求这个最大价值, 如果价值可以无限大就输出-1. 题解:当这个有向图构成一个环的时候就会使得值无限大,所以先用拓扑排序判断一下有没有环,如果有环直接输出-1, 如果没有环就再使用树形dp并记忆化存数,来找到最大值. 代码: #include<cstring> #include<iostream> using namespace std; +; s…
题目链接:http://codeforces.com/contest/842/problem/D 题解:像这种求一段异或什么的都可以考虑用字典树而且mex显然可以利用贪心+01字典树,和线段树差不多就是比较节点总数和有的数字数比较有限向左边转移. 然后这个异或其实可以利用一个数num与一个一个的x异或然后求异或的mex也是容易的只要判断当前二进制位是1那么左右节点拥有的数字数互换(不用真的互换 只要用转移体现出来就行了).这里的01字典树写法是类似线段树且利用递归的方法. #include <i…
<题目链接> 题目大意:有一个具有n个节点,m条边的有向图,每个点对应一个小写字母,现在给出每个顶点对应的字母以及有向边的连接情况,求经过的某一条路上相同字母出现的最多次数.如果次数无限大(出现环),则输出-1. 解题分析: 因为是有向图并且是对完整路径进行操作,所以我们能够想到拓扑排序,同时拓扑排序也能够比较方便地判环.现在就是考虑如何得到路径中出现次数最多的字母个数,我们对每个节点,维护一个dp[u][j],表示u节点在所有通过u的道路中,截止到u节点,j 字母所出现的最大个数(其实就是最…
题意:将一个字符串上的n个字符视作点,给出m条有向边,求图中路径上最长出现的相同字母数. 分析:首先如果这张图中有环,则可以取无限大的字符数,在求拓扑排序的同时可以确定是否存在环. 之后在拓扑排序的结果上分别对26个字母dp求出最大结果,并取最大值(一定要分别对每个字母dp,否则会出现问题). #include<bits/stdc++.h> using namespace std; ; int N,M; vector<int> G[maxn]; vector<int>…