字符串
。
S atur
要变成萤火虫~
展开
-
L1-064 估值一亿的AI核心代码 (20 分) 格式错误
传送门题意: 思路:· 个人思路是先处理原文串a所有空格和大小写变成串b· 再处理串b中的各种替换问题,由于在处理单词替换时虽然先考虑的“I”的替换,但是之后再不会变量到该单词,所以并未出现大家所说的测试点2(can you)的卡顿。·但是特别注意这个题的另外一个坑点,本人就是一直测试点1和测试点4格式错误,后面通过这篇博客的详细讲解才通过了本题。·测试点1:结尾没有标点符号而有多个空格·测试点4:三个空格,要求输出"AI: "即可。AC代码:#inc...原创 2022-03-19 16:50:46 · 486 阅读 · 0 评论 -
1009.Singing Superstar (子串数量统计) (2021“MINIEYE杯”中国大学生算法设计超级联赛8)
传送门题意:需要寻找母串s中总共有多少个不相交的子串ai。思路:由于|s|达到1e5,且子串数量n也有1e5的大小,显然不能暴力寻找。再结合子串|ai|最多30的长度,我们可以遍历到s的每个位置时都截取1~30长度的子串,这样复杂度最多O(n*30)再加上一些函数和map的耗时2s也足够了,再利用二维数组统计每个子串的数量。最后需要注意的是,会有重复的ai,于是再利用二维数组统计时需避免重复。代码实现:#include<bits/stdc++.h>#define endl..原创 2021-08-15 10:14:50 · 202 阅读 · 0 评论 -
D. Determine the Photo Position (简单找子串)(2021牛客暑期多校训练营1)
传送门题意:在 n*n 的字符矩阵中的每一行找出能把 m 长由 '2' 组成的字符串放入的位置数('0' 的位置表示空缺可填补)。思路: 简单遍历每一行记录一下即可。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define lo...原创 2021-07-24 09:58:12 · 179 阅读 · 0 评论 -
E.Figure Skating (字符串排序/签到) (2021年度训练联盟热身训练赛第五场 )
传送门题意:给出n个人的历史排名成绩和现在排名成绩,如果有人进步就输出进步最大的人名,否则输出"suspicious"。思路: 1.可以结构体排序写 2.也可直接标记前后排名情况,如果没有一点改变就是可疑,否则必定有进步的人,找出进步最大者即可。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long.原创 2021-05-07 00:16:13 · 210 阅读 · 0 评论 -
C.Ducky Debugging(简单判断/签到)(2021年度训练联盟热身训练赛第五场 )
传送门题意:这是一个简单的判断交互题,用getline()输入带空格的一整行字符串,如果最后是"?"结尾就输出“Quack!”,如果是"."结尾就输出“*Nod*”。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define l原创 2021-04-30 00:08:13 · 141 阅读 · 0 评论 -
Codeforces B. Partial Replacement (简单模拟)(Round #710 Div.3)
传送门题意:给你一个只有 '.' 和 '*' 组成的长度为n的原始字符串,你可以将其任何一个 '*' 替换成 'X',但需要满足一定条件。条件:①第一个和最后一个 '*' 必须替换,②替换过后字符串中任意两个相邻的 'X' 的下标差不得超过k。要求:求出需要替换的最少 '*' 数。思路:从第一个 '*' 到最后一个 '*' 遍历一遍就好,在遍历的过程中记录上次替换的位置 pre 和上次遇到 '*' 的位置 px ,每过k各位置就替换一次即可。代码实现:import java.u原创 2021-03-26 17:02:22 · 290 阅读 · 0 评论 -
Codeforces G. Maximize the Remaining String (单调栈&字符串子序列) (Round #710 Div.3)
传送门题意:给你一个长度为n的全由小写字母组成的字符串,要求你保持原序列顺序的前提下去重得到字典序最大的子序列。思路:思路其实很清晰,就是在能让大的字符靠前且自身还能在后面出现的情况下先输出较大的字符。赛中代码基本框架没啥问题,但是万万忘了单调栈这个好东西呀!呜呜呜嗝~后面才知道这是个牛客原题,嗐,太垃圾了,人菜还不喜欢刷题,代码如下,具体思路见原题代码注释。C++代码实现:#include<bits/stdc++.h>#define endl '\n'#def原创 2021-03-26 12:50:59 · 218 阅读 · 2 评论 -
E. Early Orders (单调栈&字符串子序列) (2021年度训练联盟热身训练赛第一场)
传送门思路:打cf知道原题回来补的,原本思路感觉和这个差不多,但是万万没想到用单调栈来直线就很简单了。具体实现还是参考了大佬博客,简直不要太nice!(具体思路见代码注释。)#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define lo原创 2021-03-26 11:13:28 · 174 阅读 · 0 评论 -
Codeforces B. Binary Removals (Round 106 Rated for Div.2) (思维/二进制串/模拟排序))
传送门题意:给你一个二进制串,试问是否能够通过删除一些不相邻的字符,以使得二进制串变成非降序串。思路:原理很简单,不用管前面的0,只要满足第一次出现相邻的“11”时,后面不会再出现相邻的“00”即可。代码实现C++:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int原创 2021-03-19 11:53:06 · 280 阅读 · 3 评论 -
Codeforces C. K-beautiful Strings (字符串反向贪心枚举) (Round #705 Div.2)
传送门题意: 给你一个长度为n的字符串s,要求你找到比s大的最小长度为n的字符串c,且必须满足c中每个字符出现的次数都能整除k,若找不到合法的字符串输出"-1"。思路:参考官方题解代码和大佬思路解析,细节见代码注释。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int原创 2021-03-07 15:40:05 · 300 阅读 · 0 评论 -
F. Infinite String Comparision (字符串 & 字典序) 2020牛客暑期多校训练营(第一场)
传送门思路:一般的思路无非就是模拟判断一下,当然就需要考虑到s和t的长度已经对应字符的字典序大小问题。但是我看见一篇大佬博客写得妙啊!代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define lowbit(x) (x &(-x))#原创 2020-09-05 16:38:28 · 119 阅读 · 0 评论 -
Codeforces D. Secret Passwords (并查集 / 字符串分组)
传送门题意: 给定n个字符串。如果存在一个或多个字母同时在字符串a和b中出现, 这a和b就被分在同一组如果a和c在同一组 b和c在同一组, 则aa和bb也在同一组问所有的字符串最后被分成几组?思路:基本原理:利用并查集维护下字符集合。把每一个字母当成一个点,对于每一个给出的字符串,把字符串中的所有字母之间都连上边。这样,若两个字符串有公共的字母,他们就一定在一个连通块内,最后求出连通块个数就是答案。代码实现:#include<bits/stdc++.h>#defin原创 2020-08-22 01:06:09 · 192 阅读 · 0 评论 -
Codeforces D. Omkar and Bed Wars (思维 / 构造) (Golab Round 10)
传送门题意: 现有一个一圈人在进行游戏(给出他们的初始攻击状态),R表示向右边相邻的人进行攻击,L反之。有一游戏规则:若受到单方向攻击就必须还予攻击,若受到0或两个方向的攻击则任选一个方向攻击。现问需要改变多少次(将R取反为L,或将L取反为R)才能使这一圈人按在规则进行游戏。思路:若都是单一元素,那么只需要改变n/3上取整次即可。若出现R和L交替,则对每次连续区间改变cnt/3次即可(cnt为连续区间的长度)。代码实现:#include<bits/stdc++.h>#defi原创 2020-08-17 19:20:45 · 239 阅读 · 0 评论 -
1005. Equal Sentences (dp / 字符串)2020 Multi-University Training Contest 4
传送门思路:题意:给一个字符串 S ,求与其相似的本质不同的字符串 T 的个数。相似的定义有:1.单词的可重集合相同。2.对于一个词 α ,它在 S 中的第 i 次出现和在 T 中的第 i 次出现的指数相差不超过1。官方题解:根据题解,不难找到如下规律:如果S[i] == S[i-1],就有dp[i] = dp[i-1].否则就有dp[i] = dp[i-1] + dp[i-2] + 1.第 i 位置存在即是dp[i] + 1个解。代码实现:#includ原创 2020-07-31 17:21:41 · 136 阅读 · 0 评论 -
Codeforces C2. Prefix Flip (Hard Version)(二进制串 / 模拟) (Round #658 Div.2)
传送门题意: 其实这就是C1题的加强版,只不过C1的字符长度是1000且操作次数不得 > 3n,而C2的字符长度是1e5且操作次数不得 > 2n,且T都是一样为1000.思路:现在的时间复杂度为O(n * t) = 1e8,堪堪能过,因此实际的翻转操作便不再可取了。我们先将a全部翻转成同一字符(当然就是a的最后一个字符),由于同一字符取反后还是一致的,所以取反便不再有意义。因为答案只需要进行操作的位置,所以再按照b字符串从后往前开始匹配对a的前缀进行取反,当然过程中并不用真正的取原创 2020-07-23 16:45:39 · 160 阅读 · 0 评论 -
Codeforces C1. Prefix Flip (Easy Version) (二进制串 / 模拟 / 构造) (Roun #658 Div.2)
传送门题意: 给出两个长度为n的二进制串a和b,你每次可选取一段前缀子串取反并翻转(即:10010 -> 01101 -> 10110).已知在3 * n次操作内一定能将a变成b。先让你找到一种处理方法将a变成b,且操作次数不得超过3 * n。输出处理的次数,和每次选择的前缀长度。思路:既然是每次翻转整个前缀,那么意味着每次前面的字符都会发生改变,那么我们就可从后往前改变。从后往前挨个看,若当前位置和目标b该位置一样就直接考虑前一个字符。因为是取反后还要交换,所以每次的a[i]都是原创 2020-07-23 16:35:20 · 266 阅读 · 0 评论 -
L. Problem L is the Only Lovely Problem (子串判断) 2020牛客暑期多校训练营(第三场)
传送门思路:题意:只要S的开头是 “lovely”(不区分大小写), 那么这个字符串就是lovely,否则就是ugly。自己遍历开头6个字符判断是否是lovely即可。代码实现:#include<bits/stdc++.h>#define endl '\n'#define null NULL#define ll long long#define int long long#define pii pair<int, int>#define lowbit(原创 2020-07-22 22:30:00 · 229 阅读 · 0 评论 -
B. Classical String Problem (字符串 / 指针 -> 移动标签) 2020牛客暑期多校训练营(第三场)
传送门思路:题意:对于M操作:若x为正数将S串的前x个字符的子串去掉后拼接在末尾,反之若x为负数就将S末尾 |x| 个字符的子串去掉后拼接在开头。而对于A操作就直接输出第x个字符。最开始傻傻的就那么简单粗暴的进行模拟操作,白白T一次,呜呜。其实原理很简单,将整个字符串看做一个环,无论怎么拼接交换,总的字符顺序不会变(即还是同一个字符环)。然后直接用一个指针指向开头位置bg,最开始bg为0(指向开头)。若在M操作中:若x为正数,直接bg = (bg + x) % S.size()找到下一原创 2020-07-22 22:14:09 · 220 阅读 · 0 评论 -
1004. Distinct Sub-palindromes (思维 / 回文串 / 构造)(2020 Multi-University Training Contest 1)
传送门思路:题目要求找到长度为n的字符串S的数量——S的回文子串种类最少。(英语弱鸡,呜呜呜,比赛的时候一直没理解到题意)思路很简单,对于n < 4的,直接输出 26 ^ n即可;而对于 n > 4的情况直接构造abcabc…这样的S串即可,所以答案是26 * 25 * 24.(连取模都不用了,比赛的时候最开始一直以为是快速幂求26 ^ n,嗐太垃圾了)。代码实现:#include<bits/stdc++.h>#define endl '\n'#define n原创 2020-07-21 21:35:57 · 267 阅读 · 0 评论 -
Codeforces B. Universal Solution (构造字符串 / 思维) (Round 91 Rated for Div.2)
传送门题意: 给出机器人的一段出拳序列s(只有 'R’拳头,'S’剪刀,'P’布组成)。让你构造一串出拳序列c和机器人比赛。比赛得分机制为下:机器人选择pos = 1开始与你的1开始往后一 一对应比较,若你在某个位置赢了该回合的得分+1,若输了或平局没有得分,该回合得分为win(1)。机器人选择pos = 2开始与你的1开始往后一一对应比较,该回合得分win(2).……构造的串要使得(win(1) + win(2) + …… + win(n) / n最大。思路:仔细分析下来就是(c原创 2020-07-15 20:30:40 · 436 阅读 · 0 评论 -
字符串 (子串的匹配) (智算之道初赛高校组第一场)
共 10 个测试点 每个测试点 10 分每个测试点限时 1 秒 运行内存上限 512MB给定两个字符串 S 和 T,它们都只由小写字母组成。现在请计算出字符串 SS的本质不同的排列中有多少种是字符串 T 的子串。本质不同:就是看起来不同,例如 aab 有 3 种本质不同的排列 aab, aba, baa。输入格式第一行有一个字符串 S第二行有一个字符串 T输出格式输出一个整数表示字符串 S 的本质不同的排列中有多少种是字符串 T 的子串数据规模与约定对于%30的数据,1 <=原创 2020-07-13 12:58:33 · 791 阅读 · 2 评论 -
Codeforces B. Codeforces Subsequences (思维 / 字符串构造) (Global Round 8)
传送门题意: 构造一个最短的字符串,使得其中至少含有 k 个"codeforces"子串。思路:显然在构造的过程中以"codeforces"的顺序是最高效的—即相同的字符最好在一起,而且字符出现的顺序和"codeforces"的字符出现顺序一致。而子串的数量就为所有字符个数的乘积。可一次枚举添加一个字符—即按字符顺序循环添加,而k最多1e16,平摊到每个字符顶多1e2,那么时间复杂度最多len(“codeforces”) * 1e2。代码实现:#include<bits/stdc+原创 2020-07-10 21:47:10 · 495 阅读 · 3 评论 -
Codeforces B. AccurateLee (思维 / 判断 / 二进制串) (Round #652 Div.2)
传送门题意: 有一个01字符串需要清理,对于每个"10"子串,你都可以选择其中一个字符清除。标准规则认为越短的串越干净,同样长的串字典序越小越干净。先让你安装标准规则清理字符串,并输出最干净的结果。思路:找到左边第一个 ‘1’ 的下标pos1,已经右边第一个 ‘0’ 的下标pos0。若其中没有’0’或没有’1,'或者所有0在1的左边就直接输出原字符串。在整个字符串中部(pos1 到 pos0之间):所有的 ‘1’ 都可被pos0位置的 ‘0’ 清除掉,而所有的 ‘0’ 可以不pos1位置的 ‘原创 2020-07-09 23:04:17 · 213 阅读 · 0 评论 -
Codeforces F. Binary String Reconstruction (二进制串 / 构造) (Round #640 Div.4)
传送门题意: 对于一个二进制串,取其每个相邻的两个字符的子串并规定和统计其类型的数量。n0表示子串中’1’为0个的子串数量n1表示子串中’1’为1个的子串数量n2表示子串中’1’为2个的子串数量现给出n0,n1和n2,要求你构造一个满足三个数值的二进制串。思路:若n1为0,那么n0和n2必有一个为0;直接处理它就好若n1不为0,那么先处理n0,再接上n2,最后处理n1(注意中间有个"01"串,所以在处理前n1需要 - -)。代码实现:#include <cstdio>原创 2020-07-06 21:39:10 · 250 阅读 · 0 评论 -
字符串atoi()函数:PTA1094谷歌招聘(20分)
题目入口2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘。内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是自然常数 e 中最早出现的 10 位连续数字。能找出这个素数的人,就可以通过访问谷歌的这个网站进入招聘流程的下一步。自然常数 e 是一个著名的超越数,前面若干位写出来是这样的:e=2.7182818...原创 2020-04-08 19:22:12 · 218 阅读 · 0 评论 -
哈希表:字符串(前缀哈希法)
题目链接:https://www.acwing.com/problem/content/843/题意:给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2,请你判断[l1,r1]和[l2,r2]这两个区间所包含的字符串子串是否完全相同。且字符串中只包含大小写英文字母和数字。数据范围1≤n,m≤1e5输入样例:8 3aabbaabb1 3 5 71 3...原创 2020-01-27 23:15:54 · 1921 阅读 · 3 评论 -
Trie:字符串统计
题目链接:https://www.acwing.com/problem/content/837/题意:维护一个字符串集合,支持两种操作:“I x”向集合中插入一个字符串x;“Q x”询问一个字符串在集合中出现了多少次。共有N个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。数据范围1≤N≤2e4输入样例:5I abcQ abcQ abI abQ ab输...原创 2020-01-25 23:11:14 · 227 阅读 · 0 评论 -
Kmp算法
题目链接:https://www.acwing.com/problem/content/833/题意:给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串P在模式串S中多次作为子串出现。求出模板串P在模式串S中所有出现的位置的起始下标。输入格式第一行输入整数N,表示字符串P的长度。第二行输入字符串P。第三行输入整数M,表示字符串S的长度。第四行...原创 2020-01-25 22:37:02 · 140 阅读 · 0 评论