![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
逻辑思维
文章平均质量分 61
程序设计竞赛中逻辑思维相关知识
小飞猪Jay
远风知我意,微凉又深情。
展开
-
2718. 查询后矩阵的和
查询后矩阵的和原创 2024-07-14 11:10:20 · 315 阅读 · 0 评论 -
字典序最小的美丽字符串
字典序最小的美丽字符串原创 2024-06-22 12:54:40 · 514 阅读 · 0 评论 -
2589. 完成所有任务的最少时间
给你一个二维整数数组 tasks ,其中 tasks[i] = [starti, endi, durationi] 表示第 i 个任务需要在 闭区间 时间段 [starti, endi] 内运行 durationi 个整数时间点(但不需要连续)。输入:tasks = [[2,3,1],[4,5,1],[1,5,2]]输入:tasks = [[1,3,2],[2,5,3],[5,6,2]]当电脑需要运行任务时,你可以打开电脑,如果空闲时,你可以将电脑关闭。然后问所有时间点都选出之后,总的最少时间是多少?原创 2024-05-15 10:21:46 · 441 阅读 · 0 评论 -
2839. 判断通过操作能否让字符串相等 I
题意就是,可以交换距离为2的两个字母,通过这个操作使得两个字符串相等。这道题的难度很低,因为它的字符串长度只有4.这里我们抛开长度不弹,假设他是一个长度很长的字符串,我们这里介绍的本类题的通用做法。只要两个字符串偶数位上的所有字符都相同,奇数位上的字符都相同,就可以通过交换操作使两个字符串相同。选择两个下标 i 和 j 且满足 j - i = 2 ,然后 交换 这个字符串中两个下标对应的字符。给你两个字符串 s1 和 s2 ,两个字符串的长度都为 4 ,且只包含 小写 英文字母。上的字符是可以所以交换的,原创 2024-05-12 10:02:55 · 285 阅读 · 0 评论 -
1702. 修改后的最大二进制字符串
这道题有两种操作方式,一种是将00变成10,一种是将10变成01,求任意次操作之后可以得到的最大二进制的字符串。然后我们使用操作2,将两个位置之间的所有的1都移动到末尾,就变成了1000000000011111111111。然后再使用操作1,将所有连着的0都变为1,只保留最后一个0,1111111111011111111111。nononono,举个最简单的例子,010,我们就可以先用操作2变成001,再用操作1变成101。一个随便敲的字符串,首先确定01交互的位置,就是第一个0的位置到最后一个0的位置。原创 2024-04-10 09:22:44 · 249 阅读 · 0 评论 -
766. 托普利茨矩阵
正常来讲,最直观的做法应该就是第一行的每个元素开始向右下方遍历,看看是否相等;但其实你仔细思考一下,就会发现,不需要这么麻烦,满足题意的最基本的条件,不就是每个元素都跟左上方的元素相等么(如果存在的话)。如果这个矩阵是托普利茨矩阵,返回 true;输入:matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]]如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵。输入:matrix = [[1,2],[2,2]]对角线 “[1, 2]” 上的元素不同。原创 2024-04-01 09:36:40 · 710 阅读 · 0 评论 -
146. 序列
然后,这 n 个数字,不就相当于你已经排好序的从小到大的第一排数字嘛,你接下来得到的第三排序列,不就相当于刚刚第二排的序列嘛?那这里你就会想到,我把第一排先排个序,再和第二排进行加和,那这次得到的n个数字不就是a0为基础的n个数了么。你就会想到一个只有n个空间的数组不就行了,先用第一排的第一个数字,加上第二排的n个数字,得到了最初的n个数字。然后,你就发现没有然后了。因为第一排的那个数字,你不知道他在第一排里面是多大,所以和第二排加和后你也不知道这些数字和第一排其他数字加上第二排相比是怎样的个大小关系。原创 2024-03-31 22:20:08 · 653 阅读 · 0 评论 -
1230. K倍区间
可以发现,他要求的是连续的序列,那这时候就会想到前缀和,他可是处理连续序列和的有效手段,记录了起点到当前位置的元素和,那要求某一段区间和的话,只需要做个减法就可以了。然后你可能又会问了,那遍历一遍求出来的只是每个起点到该位置的元素和啊,那如果要计算每一段的元素和,那岂不是还得再双重循环才行?就是给出 n 个数字,从里面选择连续的序列进行加和,问有多少种序列的选择可以使得选出的序列和可以整除k。那这样做肯定是不行的,因为范围是十万级别的,复杂度是1到十万的等差数列求和。那就思考,有什么优化的做法么?原创 2024-03-30 19:53:40 · 201 阅读 · 0 评论 -
2952. 需要添加的硬币的最小数量
如果coins[i] ≤ x,说明当前这个硬币其实是多出来的,因为我们刚才已经说了,x指的是当前 [ 1 , x-1 ] 都是可以得到的,说明在遍历到coins[i]之前就已经可以得到[1 , x-1] ,那加了coins[i]后,可以得到的面值就变成了[1,x+coins[i]-1],所以x的值就更新为x+coins[i]。x是我们要加的面值从1开始,这里要注意的是,x不只是我们要加的硬币的数值,还指x以内的面值已经都可以得到了,即 [1,x-1]都可以得到。原创 2024-03-30 10:35:14 · 612 阅读 · 0 评论 -
游游的9的倍数
你这么看肯定是看不懂的啊,你得看dp[4][1]里面的 1 是怎么来的,是a[i]+j 得到的,也就是(8+2)%9=1。首先是前一个位置余数是 (j+a[i])%9 的数量,也就是dp[i-1][(j+a[i])%9],也就是说不算当前 i 位置的数,就已经有这些数量了。dp[i][(j+a[i])%9],就应该是当前位置余数是(j+a[i])%9的数量加上当前位置之前的余数是 j 的数量,这样才是总数量。dp[i][(j+a[i])%9]:i 位置及之前余数是 (j+a[i])%9 的数量。原创 2023-07-06 22:49:59 · 308 阅读 · 2 评论 -
游游的交换字符
游游的交换字符原创 2023-07-04 14:16:16 · 801 阅读 · 1 评论 -
AcWing 4908. 饥饿的牛
注意到 d 的数量,即发草的天数是有限的,N范围内,那既然所有天数看不了,我们就看所有的 d 就好了,回到上面我们讲的思路,也就是每次都看小线段的起始点。如果d不是1,那说明 d 之前都是没草吃的,这里我们用 res 来记录没有草吃的天数。这个问题的中心思想就是,把1 ~ t 这段天数看成一个线段,每个 di 天的时候给 bi 捆草,也就是说 di ~ di+bi 这个线段是有草吃的,那想要得到的结果就是在一个大线段中有许多这样的小线段,问大线段上被小线段覆盖过的整数点有多少个。初始时,牛棚中没有干草。原创 2023-06-13 11:01:28 · 578 阅读 · 1 评论 -
1010. 总持续时间可被 60 整除的歌曲
形式上,我们希望下标数字 i 和 j 满足 i < j 且有 (time[i] + time[j]) % 60 == 0。1-59,2-58,3-57这种的,就直接对应数量做乘法就行。那这样的话,不就是对所有的数都对60取余,然后用一个数组存下余数对应的数有多少个,然后1-59,2-58这样两个余数对应的数字的数量相乘,不就是答案嘛?那想到这,就很自然地发现,对60取余之后,就变成60以内的数了,那如果最终结果是60的倍数,不就说明余数相加是60的倍数嘛?输入:time = [60,60,60]原创 2023-05-07 13:33:26 · 428 阅读 · 0 评论 -
1419. 数青蛙
模拟原创 2023-05-06 13:32:58 · 191 阅读 · 0 评论 -
1163. 按字典序排在最后的子串
按字典序排在最后的子串原创 2023-04-24 13:07:31 · 260 阅读 · 0 评论 -
1041. 困于环中的机器人
1041. 困于环中的机器人原创 2023-04-11 21:53:15 · 58 阅读 · 0 评论 -
5.最长回文子串
OK , 处理完长度为2的之后,j 开始从 3 到 l(字符串长度) 开始遍历,当长度为 j 的时候,i 从0 也就是第一个字符开始枚举,那如何判断 i 为初始字符且长度为 j 的字符串是不是回文串呢?你能想到最笨的方法是什么?从字符串的长度开始向长度为 1 开始枚举,然后判断此长度下的所有可能的字符串是否满足回文串。从小到大就不一样了,如果这个小的子串是回文串,那么如果他两端的字母是一样的,那加上两端的大的字符串也是回文串。本题中的最大长度仅仅是1000,那按照上面的做法,时间复杂度是10的八次幂。原创 2023-03-23 23:27:24 · 87 阅读 · 0 评论 -
哈夫曼树的带权路径长度和
正常想要计算哈夫曼树的路径长度之和,是遍历一遍树,将叶结点的权值乘上深度再加和。那么对于路径和的计算有这样一个公式:哈夫曼树的带权路径长度和=等于所有非叶节点的权值和所以说我们只需要每次将数组前两个加到res中,再将两者的和放入数组中重新排序,直到数组中剩一个数停止代码:#include<bits/stdc++.h>using namespace std;int a[10010];int main(){ int n; int res; while(cin >&g.原创 2022-03-27 20:06:12 · 2066 阅读 · 0 评论 -
杭电2094 产生冠军
题目描述:一群人打乒乓球,两两PK,每两人之间最多打一场比赛,规则如下: 如果A打败了B,B又打败了C,而A与C之间没有比赛,那么就认为A一定能打败C。 如果A打败了B,B又打败了C,而C又打败了A,那么A、B、C都不可能成为冠军。 根据此规定,在经过了若干场比赛之后,确定是否已经产生了冠军。输入:输入含有多组测试数据,每组以一个整数n(n<1000)开头,后跟n对选手的比赛结果,比赛结果以一对选手名字(中间隔一空格)表示,前者战胜后者。n为0,表示输入结束。输出:对于每组输入,若能产生冠军原创 2022-01-12 14:58:43 · 196 阅读 · 0 评论 -
共鸣问题
题目描述:链接:https://ac.nowcoder.com/acm/contest/10324/C来源:牛客网现在有n个音符和m对共鸣关系,编号为1~n,每个音符自己有一个奏响时的优美程度,共鸣关系(x,y,z)表示音符x和y同时奏响的额外优美程度是z,同时不奏响则为-z,其他情况为0。音符可以选择奏响或者不奏响,不奏响的音符没有优美程度。我们想知道最大的优美程度和是多少,我们不需要知道具体是哪些音符被奏响了,只需输出最大和即可。共鸣关系可能有重复,其共鸣效果也会重复叠加。思路:可惜就差这原创 2020-12-23 22:04:59 · 177 阅读 · 0 评论 -
B. Jumps
题目:https://codeforces.com/contest/1455/problem/BYou are standing on the OX-axis at point 0 and you want to move to an integer point x>0.You can make several jumps. Suppose you’re currently at point y (y may be negative) and jump for the k-th time. Yo原创 2020-12-01 08:47:19 · 371 阅读 · 1 评论 -
Binary Table (Hard Version)(Easy Version)
https://codeforces.com/contest/1440/problem/C2题意:给出n,m,给出nm的矩阵,由0和1组成,每次你可以执行一个操作,选出22正方形中的三个数,将这三个数反转。问在有限的步骤之内将矩阵变为全为0的矩阵的操作数以及操作。简单和困难问题的差别就是,操作数上限的不同。思路:构造。从左上到右下开始遍历,遇到1就将它变为0,再将右侧的数和下面的数转变。因为右侧和下面相邻的数都将再之后的遍历中操作到,如果是1的话会将其变为零,所以无论怎样转换都没有影响。执行此操作原创 2020-11-23 21:50:23 · 211 阅读 · 0 评论 -
【蓝桥杯】剪邮票(不用dfs也能做)
题意:给出3*4的一张邮票,你需要从上面剪五张,要求这五张是连续的,问有多少种方法。思路:我看了网上的dalao们的代码,清一色的dfs解决。然饿我连代码都看不懂,所以只好写个不需要dfs就能解决的代码了。首先a[]表示十二张邮票,0表示未被剪,1表示被剪掉了.b[]表示被剪掉的位置c[]表示哪些位置被剪掉可以保证是连续的首先将b中第一个位置标记为可减掉,并将周围的满足条件的位置标记为可减掉,然后将b中被标记为可剪掉的位置也标记并不断扩大。然后我们进行4次循环(因为此时b中最多还有四个数没原创 2020-10-16 14:56:29 · 168 阅读 · 0 评论 -
B. Chess Cheater
题目:You like playing chess tournaments online.In your last tournament you played n games. For the sake of this problem, each chess game is either won or lost (no draws). When you lose a game you get 0 points. When you win you get 1 or 2 points: if you hav原创 2020-10-15 10:49:58 · 332 阅读 · 0 评论 -
珂朵莉与宇宙
题目描述:链接:https://ac.nowcoder.com/acm/problem/14600来源:牛客网星神是来自宇宙的所以珂朵莉也是吧所以我就出了个题给你一个长为n的序列a,有n*(n+1)/2个子区间,问这些子区间里面和为完全平方数的子区间个数思路:前缀和记录,记录完你会发现枚举的话会超时。那怎么办呢?我们换一种枚举的方法,枚举平方数,因为观察可以发现ai的范围很小。而且因为是前缀和,那一定是单调不递减的,一遍就完事。代码:#include <cstdio>#in原创 2020-09-22 13:09:52 · 303 阅读 · 0 评论 -
3142 曼哈顿的噪音
题目:曼哈顿城正在施工!城市里一共有n个施工点,施工点总是会发出莫名其妙的噪音,特别是当两个施工点距离足够远时还会发生神奇的反应,让噪音变得更大。所以现在曼哈顿的区长请你来计算一下两两施工点之间曼哈顿距离的最大值是多少。坐标为(x1,y1)的施工点和坐标为(x2,y2)的施工点曼哈顿距离为|x2−x1|+|y2−y1|输入:第一行一个整数n接下来n行,每行两个整数表示施工点的坐标。坐标绝对值<=1e6输出:一行一个整数表示最大的曼哈顿距离。数据范围:对于30%的数据: n<原创 2020-09-15 19:40:06 · 214 阅读 · 1 评论 -
旅游观光
题目:有n个车站,任意两个车站之间均可达,票价是(i+j)mod(n+1),问走过所有的车站,需要的最小花费是多少。思路:首先根据票价的式子,可以看出,每次从前面取一个点,在从后面取一个点,这两点之间的票价是0.那么这样一直取下去,花费是最少的。费用就是(n-1)/2.代码:#include <cstdio>#include <cstring>#include <stack>#include <queue>#include <map&g原创 2020-07-13 19:09:33 · 369 阅读 · 0 评论 -
栗酱的文明2
题目描述:总结一下就是,给出每个点最多可以和多少个点相连,让你找出能构成完全图的最多的点的个数。解题思路:如果想要组成完全图,那每个点之间都要有连线,也就是说每个点所能连的线应该大于等于完全图中点的个数。我们只要将点的连线个数从大到小之后排序再找一遍即可。AC代码:#include <cstdio>#include <cstring>#include <stack>#include <queue>#include <map>#i原创 2020-07-10 15:17:01 · 495 阅读 · 2 评论 -
生物课程
题目描述:给出n,m,表示有n个点,m条边。接下来的m行分别输入每条边的两个端点,问这是属于什么类型的图案,可以是X,Y,I,NotValid。解题思路:如果用图来解题的话,那就是你太强了,杀鸡用牛刀。仔细观察三种类型的特点,就会发现他们之间的区别:X型有1个4度点,4个1度点,其他都是2度点Y型有1个3度点,3个1度点,其他都是2度点I型有2个1度点,其他都是2度点不满足上述三种情况的,输出NotValidAC代码:#include <iostream>#include &原创 2020-07-09 16:59:25 · 136 阅读 · 2 评论 -
Crusaders Quest
题目大意:每行给出九个字母,由3个a,g,o组成,每次可以消除相连的K个字母,K>=1。当K=3时是最好的消除方法。问最好的消除方法最多可以多少次。解题思路:首先从可以消除K=1个字母,就可以看出,结果(res)最少为1。首先我们尽可能地将3个连着的消除,res如果等于3,那就输出3。如果res=1,那就输出2。因为剩下的6个字母,最少可以组成三个相连,但是不能是两种3个相连,所以输出就是2.res不可能等于2,因为若是2的话那剩下的三个一定一样,那就是res=3的情况。除了上述情况,就原创 2020-07-09 16:53:12 · 325 阅读 · 0 评论 -
codeforces B. Binary Period
题意:给出一个只由 0和1 构成的子串 t ,要你求出一个原串,并且原串长度不大于两倍子串长度,同时原串的循环节最短。思路:仔细想想不难发现,当字串都是0或都是1的时候,原串只需要和字串一样即可;当字串既包含0又包含1的时候,原串只有两种可能,101010…或者是010101…。为什么这么说呢?因为原串的长度可以是字串的二倍,那我只需要在字串的每一位旁边补上和它不同的数字即可。比如说111...原创 2020-04-27 19:10:46 · 223 阅读 · 0 评论 -
codeforce. A. Little Artem
题意:给出行数和列数,问与W相邻B比与B相邻的W数量多1的排列思路:因为是A题,所有一定不是什么难题。想想就有了,BWWW…BWWW…BWWWBBBB可以看出,这样有规则地排列刚好可以保证题意。代码:#include<iostream>#include<iomanip>#include<bits/stdc++.h>using nam...原创 2020-04-13 19:30:16 · 116 阅读 · 0 评论 -
codeforce TV Subscriptions
题意:找出连续的d个数,输出其中不同数字的最小个数。思路:因为每次我们都只要看d个数字就可,而每次我们都只是往后移一位,所以说每次我们删去第一个数字,加入一个数字,在判断不同的个数即可,无需每次都d次循环。代码:#include<bits/stdc++.h>using namespace std;int n,t,m,k,d;int a[200001],b[1000001...原创 2020-04-08 09:56:55 · 170 阅读 · 0 评论 -
容斥定理
题意:给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数。 例如N = 10,只有1不是2 3 5 7的倍数。思路:给定的范围很大,这里我们可以巧妙地运用容斥定理。容斥原理:假如有两个集合:A,B,则AUB = A+B-AB三个集合:A,B,C,AUBUC = A + B + C - AB - AC - BC + ABC四个集合,可以想象成3维的,AUBUCUD = A+B...原创 2020-03-28 09:34:49 · 978 阅读 · 0 评论 -
A. Competitive Programmer
题意:给出一串数字,数字的顺序可以随意变换,如果有一种情况可以是该数字能够整除60,那么输出red;否则输出cyan思路:60=2 * 2 * 5 * 3 = 10 * 2 * 3。所以如果要想输出red,就要满足下面三个条件:1 序列必须存在02 序列所有数字之和必须是3的倍数3 序列在只有一个0的情况下,必须有2的倍数存在代码:#include<bits/stdc++....原创 2020-03-18 21:31:48 · 297 阅读 · 0 评论 -
C. Frog Jumps
题意:一行字符串由L和R组成,数组从1标号到n。青蛙从0的位置开始起跳,想到达n+1的位置,当他跳到L的时候只能往左跳,跳到R的时候只能往右跳,跳的范围由你来定。问最小的d是多少思路:这道题超级无敌水。你只需要从头到尾判断一边字符串,如果是L的话是一定不行的。这里我们只看位置是R的时候,因为当位置上是L的时候,一定是往左跳到里当前位置最近的R才能更好的跳到n+1这个位置。每次我们都用pos更...原创 2020-03-13 09:04:06 · 530 阅读 · 0 评论 -
codeforce A. Dead Pixel
#include<iostream>#include<bits/stdc++.h>using namespace std;typedef long long ll;int t ,a , b, x , y;int main(){ cin >> t; while(t--) { cin >> a >> b >>...原创 2020-03-08 19:07:42 · 184 阅读 · 0 评论 -
codeforce A1. Add on a Tree
题意:一棵树,你可以选定任意两个叶子,给他们之间的路径赋值,问是否能选定任意两条边赋任意的值。思路:其实没有想象的那么复杂,从给的例子就可以看的出来,只要是有一个节点,他的入度是1,出度也是1,那这两条边一定是不可以的,其他情况就都可以满足题意。代码:#include<bits/stdc++.h>#include<iostream>#include<st...原创 2020-03-03 13:21:04 · 121 阅读 · 0 评论 -
codeforce B. Journey Planning
题意:输入一个数n,接下来输入n个数,b[i]表示的是美丽值。她所经过的城市的路线必须满足b[j]-b[i]=j-i。问最大的美丽值是多少。思路:只要你稍微动一下你的笔,你就会发现,要想满足b[j]-b[i]=j-i,那移项之后就是b[j]-j=b[i]-i,所以说我们只要储存b[i]-i累加的值,直接线性寻找就可以了。代码:#include<bits/stdc++.h>u...原创 2020-03-02 19:35:08 · 217 阅读 · 0 评论 -
codeforce. C. Perfect Team
题意: 有a,b,c三种数,有多少种三个数的组合,使得每组数,至少一个a一个b。思路: 二分是很显然的,但是还可以推公式。比赛的时候写的是二分。赛后看大牛的代码,貌似就3种情况:x,y,(x+y+z)/3。取最小值就可以了。理由的话,就是按种类数足的话,就按人数取,种类数不足的话,就按照种类数取。但是这样感觉还是不自然(没有严谨的数学推理)。假设三类数数目分别为x,y,z。令a = min(...转载 2020-02-25 11:06:57 · 213 阅读 · 0 评论