1001 Theramore 观察以下两种情况: 以0为例,上图就是说,只要有两个连续的0,我们就可以一直把它们往前移动直到移动到首位。同理只要有两个连续的1我们就可以把它们移动到尾部。 所以可以开一个栈,顺序将字符入栈,一旦遇到连续的0或者1,就把它们删去,在首尾打下标记。 const int N=1e5+5;
传送门 Problem 给你两个长度为 \(n\) 的字符串 \(s_1\) 和 \(s_2\),以及一个长度为 \(m\) 的字符串 evil 。请你返回好字符串的数目。 好字符串的定义为:它的长度为 \(n\) 字典序大于等于 \(s_1\),字典序小于等于 \(s_2\),且不包含 evil 为子字符串。 由于答案可能很大,请
CF559E Gerald and Path 设 \(dp(i,p)\) 表示完成前 \(i\) 条线段的覆盖,最右端位于 \(p\) 点的最大收益。 转移?向下一条线段转移时加上他们中间的距离?发现这样没有办法统计 \(p\) 点以前的空位了! \(\color{yellow}{\bigstar\texttt{Trick}}\):如果出现上面没有办法统计 \(p\) 点以
感觉我数据结构有些弱,最近开始练习难道为2300~2700的数据结构题。 首先我们发现,lucky number不会太多,最多就是\((2^1+2^2+2^3+2^4+1)=31\)个(最后加\(1\)是对于所有\(x>7777\)的数,最近的lucky number应该是\(44444\)) 这里我们维护的东西有些奇特——我们维护\(val_{i}=L-a_{i}\)的
实现思路: 初始化i=0,j=1,k=0,即首先选择两个起始位置,然后比较这两个位置开始的字符串的字典序大小,k表示两个字符串前k个字母相同。 如果k+1个字母仍然相同,令k++; 否则,两个字符串已经比较出大小,大的那个应该被淘汰,但是我们已经比较了k位了,这些信息应该被派上用场。 因为我们已经比
启发式合并 定义 一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计。 举个栗子:并查集的按秩合并。 每次我们将大集合合并到小集合里,新集合至少为大集合的两倍,每次合并都会变
Given an array of distinct integers candidates and a target integer target, return a list of all unique combinations of candidates where the chosen numbers sum to target. You may return the combinations in any order. The same number may be chosen from can
题目链接 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/c32eOV 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 题目描述 给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表
1、不点击鼠标就获取光标绝对位置的方法 QCursor().pos()或者cursor().pos() 2、将光标的绝对位置转化为窗口的相对坐标 上述两种方法获得的光标位置都是相对于屏幕的全局坐标,为了获得相对于当前窗口的位置,需要用到下面的方法 int x=this->mapFromGlobal(QCursor().pos()).x(); i
题意 找出 \(S\) 的最长的子串 \(T\),满足 \(T\) 是 \(S\) 的前缀、后缀,并在中间出现过。不存在则输出 Just a Legend 思路如下: 题目要求目标串是 Border,并且在中间出现过,即要求子串是 Border ,并且出现次数大于等于 3 次。 那么我们记录字符串末尾在 SAM 中的位置 pos,然后跳它到根
珂朵莉树(\(ODT\)) 0x01 珂朵莉树可以解决什么问题 对于涉及区间推平操作的问题,就是把\([l, r]\)区间内的所有数字变成相同的一个数。如果数据是随机的就可以使用珂朵莉树。 0x02 珂朵莉树的基本原理 比如一开始把一个区间分成这些部分,那么我们就可以用一个结构体将相邻的数字存
一、string 成员函数大全 构造 string()//构造空字符串 string(const char* s);//拷贝s所指向的字符串序列 string(const char* s, size_t n);//拷贝s所指向的字符串序列的第n个到结尾的字符 string(size_t n, char c);//将字符c复制n次 string(const string& str);//拷贝构造函数
应用: 解决方便加但是不方便减的情况,反之亦然 思路: 更具莫队的老排序,来排 然后对于 l.pos==r.pos 直接暴力做就行了 对于 这个区间的l.pos!=上面那个区间的, 就要把L,R重新弄一个空区间 L=R[LSTPOS]+1,R=R[pos]; 特别注意 r 是<R[pos], 你的del和add要特别注意处
3.1. 编程实现 这个游戏比较简单,没有设计游戏的欢迎画面和结束画面等,游戏一开始就是游戏进行画面。同时,游戏也没有胜负之分,不需要设计得分、生命机制等。接下来,将按照编程思路中的介绍,分3个步 编写程序和进行测试。 在本地磁盘新建“fkmt”(疯狂摩托拼音首字母)目录,根
因为最近不想做简单题,所以只有 C-E C.The Number Of Good Substrings 题目描述: 原题面 题目分析: 我们发现一个长度为 \(len\) 的二进制串能表示的长度最多就是 \(2^{len}-1\),所以我们就能很明显的发现一个性质:我们枚举的区间长度不可能超过 \(\log n\),因为如果超过这个数值很显然
https://www.luogu.com.cn/problem/CF1710C 打表发现一位上 \(a\bigotimes b +b \bigotimes c \ge a \bigotimes c\) 恒成立。 那么前面的位已经满足大于了,当前位怎么填都无所谓。也就是只要有 1 位满足大于就好了。 对 3 个式子分别记录,对 \(a,b,c\) 有无顶上界记录。因为前导零
周赛传送门 4500. 三个元素 本题可以学习的地方: 1.用map来存值和下标,map会自动排序 2.输出map中的元素可以先用vector存起来,然后输出vector中的元素 #include <iostream> #include <map> #include <vector> using namespace std; int n; map<int, int> pos; int main() { s
给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表
P5504 柠檬 考虑 \(dp\) 我们设 \(f_i\) 表示已经取下了前 \(i\) 个贝壳所得到的最大柠檬数 显然我们可以得到一个结论:每一段左右大小必然相等 因为若是左右两个端点不相等的话,必然有一个端点因为大小不同而没有贡献 这个端点就可以并到其他区建立得到更优解 我们用 \(c_i\) 表示
这个很好办,你在你的游标循环中加一个变量纪录滚过的纪录即可 如: declare @cur_pos int declare mycursor cursor for select col1,col2 from mytable declare @col1 char(10) declare @col2 char(10) open mycusor fetch next mycursor into @col1,@col2 while @@fetch_status<
1. 前言 我们经常会听同学们提到:这个图片脚本怎么没有点击效果?为什么脚本会点偏了?我想点图片的其它位置可以吗?诸如此类的问题。 今天就来跟同学们详细聊一聊,Airtest的点击位置与点击偏移这块内容,看完之后,遇到类似上面的问题,我们都可以迎刃而解啦。 2. Airtest的点击位置 用一个最
[ZJOI2007] 报表统计 题目描述 小 Q 的妈妈是一个出纳,经常需要做一些统计报表的工作。今天是妈妈的生日,小 Q 希望可以帮妈妈分担一些工作,作为她的生日礼物之一。 经过仔细观察,小 Q 发现统计一张报表实际上是维护一个非负整数数列,并且进行一些查询操作。 在最开始的时候,有一个长度
【问题描述】 建立如图所示的二叉树。输入先序遍历序列以建立二叉树。输出其后序遍历 结果,(其中空结点使用英文句号代替)。 【样例输入】 ABD...CE..F.. 【样例输出】 DBEFCA #include<iostream> #include<cstring> using namespace std; int cnt=0; // 用于根节点
显然的树上差分问题,最后要我们求每个点数量最多的物品,考虑对每个点建议线段树,查询子树时将线段树合并可以得到答案。 用动态开点的方式建立线段树,注意离散化。 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N = 1e5 + 10; 4 struct node { 5 int
E 容易发现,我们在一个点进行修改,一定可以将经过这个点的非法路径数变成\(0\)。具体的方案就是将\(i\)异或上\(2^{p_{i}}\),其中\(p_{i}>30\),并且\(p\)要两两不同。(比如\(p_{i}=30+i\)就是一组可行的\(p\)) 此时我们有一个贪心策略:为了让更多非法路径变成合法的,那么我们修改的点深度