
算法刷题
文章平均质量分 65
对一些题目的总结归纳,主要是leetcode以及codeforces
Rockict_z
这个作者很懒,什么都没留下…
展开
-
1463B. Find The Array
原题链接题意:给出一个序列,要求我们修改不大于序列之和一半的数值,使得每一个数都能整除相邻的数或者被相邻的数整除。并且更改后序列中的每一个值都要小于10910^9109。思路:本来是想将序列从头到尾遍历,使每一个被遍历到的元素都能适配他之前的序列,但过不了。后来看了别人的解答才知道,本题可以使得每个元素都变为离该元素距离最近的 2n(n=0,1,2...)2^n(n=0,1,2...)2n(n=0,1,2...) ,这样即可以保证每一对相邻元素都符合要求,而且每一个元素的变化值都不会超过他的一半,所以总原创 2020-12-19 19:18:44 · 303 阅读 · 2 评论 -
4A. Watermelon
开始在Codeforces上刷题了,每做一题都记录一下自己的代码、思路、和遇到的生单词。A. Watermelontime limit per test1 secondmemory limit per test64 megabytesOne hot summer day Pete and his friend Billy decided to buy a watermelon. They chose the biggest and the ripest one, in their opinion.原创 2020-05-19 19:22:14 · 277 阅读 · 0 评论 -
CodeForces1320A. Journey Planning
CodeForces1320A题目描述# A. Journey Planning难度 :1400标签 :data structres、DP、greedy、math、sortings思路将题目中所给条件ci+1−ci=bci+1−bcic_{i+1}-c_i=b_{c_{i+1}}-b_{c_i}ci+1−ci=bci+1−bci转化为bci−ci=bci+1−ci+1b_{c_i}-c_i=b_{c_{i+1}}-c_{i+1}bci−ci=bci+1−ci+1令si=原创 2021-08-18 16:10:18 · 139 阅读 · 0 评论 -
A. Rook, Bishop and King
原题链接tags: graphs、math、shortest paths前提条件:起始位置:r1,c1:r_1,c_1:r1,c1终点位置:r2,c2:r_2,c_2:r2,c2纵坐标上的距离:x=abs(r2−r1):x=abs(r_2-r_1):x=abs(r2−r1)横坐标上的距离:y=abs(c2−c1):y=abs(c_2-c_1):y=abs(c2−c1)思路:文中有三种棋子,我们对三种棋子分别考虑。如果起点与终点重合,无需移动,都是0。车:由于车可以四方移动,原创 2021-03-10 19:54:27 · 208 阅读 · 0 评论 -
1443C - The Delivery Dilemma
题意:有a[i]和b[i]两端序列,a[i]代表a[i]时刻外卖会送达,b[i]代表需要用b[i]的时间去获取外卖,求拿到所有外卖所需要的总时间。思路:贪心。对于每一个外卖i,ai是一个固定的值,而bi是一个累加的值。如果ai<bi,那么应选择ai(选择bi无疑会让sumb增大,从而导致后面无法得到最优解)。如果不是,就再对 sumb+bi 以及 max(maxn,ai) 进行判断(如果判断出的是sumb+bi,则需要更新sumb的值),选取较小值与maxn比较后赋给maxn。maxn即是最终结果.原创 2020-11-17 18:34:19 · 197 阅读 · 0 评论 -
hdu 4632 Palindrome Subsequence
题目链接定义:dp[i] [j]为字符串第i个字符到第j个字符所含回文子序列的数量思路:此题用了区间DP的方法。先从小问题开始考虑,由于已知一个由单个字母组成的字符串他的子字符串必定只有一个,对于每一个字符串,我们要让他的规模扩大都需要在他的头或尾加上一个字母,所以我们可以将问题从单字符组成的字符串扩大到任意长度的字符串。因此,在我们求一个字符串有多少个回文子序列的时候,可以将问题拆分为求两个次大的字符串,即最长字符串去掉头尾的子字符串的回文子序列的问题。对于字符串IJ,由于去掉开头第一个元素和末尾原创 2020-12-17 19:14:16 · 167 阅读 · 0 评论 -
B. Toy Blocks
原题地址:啦啦啦思路:要求添加尽可能少的方块,使得选取任意一个组,都可以让其他组一样多。可以先取方块总数的平均值,向上取一即是最少需要的总方块数。由于会存在方块之间数量悬殊的问题而导致错误,所以需要将该平均值与方块中的最大值比较,若平均值小于最大值,则取最大值作为之后数列的平均值。最后,通过adv*(n-1)-sum,即得到了需要添加方块数量的最小值。代码://#include<bits/stdc++.h>#include<cmath>#include<cstdio原创 2020-12-01 20:46:47 · 185 阅读 · 0 评论 -
D. String Deletion
D. String Deletiontime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou have a string s consisting of n characters. Each character is either 0 or 1.You can perform operations on the string. Each ope原创 2020-11-08 17:09:37 · 203 阅读 · 0 评论 -
The Suspects
题意:找有多少个元素和0一个集合思路:并查集问题。先把元素按输入的要求放到几个集合中,再通过查找1~n中有几个元素的根节点和0元素的根节点相同,从而判断出疑似感染者的人数。代码://#include<bits/stdc++.h>#include<cmath>#include<cstdio>#include<queue>#include<vector> #include<map>#include<set>.原创 2020-11-22 15:27:59 · 141 阅读 · 0 评论 -
B.Saving the City
题意:要求通过插入字符‘1’和消除一段全是‘1’的子序列这两个操作将一个由‘0’,‘1’构成的序列变成全‘0’序列。思路:贪心+模拟,首先分为两种情况,当序列中没有‘1’时,就不需要引爆和插入。当序列中有‘1’时,我们可以默认肯定会对第一次出现的‘1’序列进行一次引爆操作,在搜索下一个‘1’序列的同时记录中间‘0’的个数,直到找到下一个‘1’序列时,我们比较插入‘1’的费用和引爆这个‘1’序列的费用,选小的加到总费用中,就有 ans+=min(a,b*sum) ,不管选取的是哪种操作,都能保证这个序列.原创 2020-11-16 19:50:30 · 150 阅读 · 0 评论 -
CodeForces429B
CodeForces429B题目描述B. Working out难度 :1600标签 :DP思路 本题与Acwing提高课 传纸条类似,都是有一条从左上到右下和一条左下到右上的路径组成,并且只允许朝两个方向移动,不允许斜方向移动,于是我们可以很轻松的得出两条路径必有交点。 我们再来看题目,题目中说exactly one cell of gym,也就是说这两条路径只会交于一点,那么我们可以设想一下当两条路径交于该点后的运动情况。 假设绿色点为蓝红色的交点,我们从蓝色点出发到达绿色原创 2021-08-31 14:36:14 · 170 阅读 · 0 评论 -
Ubiquitous Religions
思路:简单的并查集问题,使用标准的并查集方法解答,同时要注意由于数据过大,使用cin导入数据会导致超时//#include<bits/stdc++.h>#include<cmath>#include<cstdio>#include<queue>#include<vector> #include<map>#include<set>#include<iostream>#include<str.原创 2020-11-22 14:55:42 · 198 阅读 · 0 评论 -
B. Fridge Lockers
原题链接tags: graphs、implementation思路:由于每一个冰箱都需要被两条锁链锁住,所以每一个点的花费ai都至少会被使用两次,所以总花费sum=原创 2021-03-10 19:00:29 · 200 阅读 · 0 评论 -
A. King Escape
原文链接tags: dfs and similar、graphs、implementation思路:虽然标签中说用到dfs,但是其实并不需要使用dfs解决。虽然queen可以使其所在位置的八个方向上无法通行,但是由于king的行动规则,queen在倾斜方向上的阻拦作用为0,所以能阻挡King运动的只有queen在垂直和水平方向上的阻拦作用。由此可以推出,我们以queen所在点为坐标原点,横方向与纵方向为两条坐标轴,只有当king的起始位置和终点位置在同一象限内时,king才能够顺利移动。代码如下:原创 2021-03-10 18:26:40 · 149 阅读 · 0 评论 -
1A. Theatre Square
虽然题目挺简单的,但是我没有考虑到10^9这种大数,后来查了资料用了long long 后才过了。A. Theatre SquareTheatre Square in the capital city of Berland has a rectangular shape with the size n × m meters. On the occasion of the city’s anniversary, a decision was taken to pave the Square with sq原创 2020-05-20 19:42:05 · 233 阅读 · 0 评论 -
怪盗基德的滑翔翼
怪盗基德的滑翔翼怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。不得已,怪盗基德只能操作受损的滑翔翼逃脱。假设城市中一共有NNN幢建筑排成一条线,每幢建筑的高度各不相同。初始时,怪盗基德可以在任何一幢建筑的顶端。他可以选择一个方向逃跑,但是不能原创 2021-11-01 20:43:48 · 327 阅读 · 0 评论 -
Leetcode第 299 场周赛总结
1.判断矩阵是否是一个 X 矩阵2.统计放置房子的方式数3.拼接数组的最大分数4.从树中删除边的最小分数原创 2022-06-27 22:58:37 · 235 阅读 · 0 评论 -
1617A. Forbidden Subsequence
原题链接题意一组数据包含两个字符串 SSS 和 TTT ,题目要求我们输出构成 SSS 的字母的最小排列,并且不能出现 TTT 中的排列顺序。思路要使输出的排列为最小排列,我们可以采用字典序的顺序把 SSS 中出现过的字母输出,但题目中还有一个条件,我们输出的字母顺序不能符合字符串 TTT 的顺序。由于 TTT 是"abc"这个字符串的排列,其符合字典序的排列只有"abc"一种,所以当T=="abc"T == "abc"T=="abc"的时候我们进行特殊处理,在输出过程中把"c""c""c"提前到原创 2021-12-17 12:09:15 · 556 阅读 · 0 评论 -
1619D. New Year‘s Problem
题目链接思路贪心首先我们遍历所有行,得到每一列的最大值,由此我们得到了在选择k(k≤nk(k\leq nk(k≤n)家商店的情况下最大α\alphaα的取值 (因为总共就送给nnn个人礼物,所以选择的商店数量不会大于nnn)。分以下两种情况:每一家商店买一个礼物。这时选取的商家数超过了我们限定选取的n−1n - 1n−1家,所以我们可以采取两家合并为一家的策略,去掉两家商店然后选择一家商店的两个礼物,为了最优的条件,我们肯定会选取这一行最大的两个值,由于α=min{a1,a2,...,an}\a原创 2021-12-23 15:20:54 · 682 阅读 · 0 评论 -
1617B. GCD Problem
原题链接题意找到三个数a,b,ca,b,ca,b,c, 使其满足a+b+c=na+b+c=na+b+c=n,gcd(a,b)=cgcd(a,b)=cgcd(a,b)=c。思路由于两个相邻的数必定互质。所以当 nnn 为偶数时,可以使a=(n−1)/2+1,b=(n−1)/2,c=1a=(n-1)/2+1, b=(n-1)/2, c=1a=(n−1)/2+1,b=(n−1)/2,c=1,这样aaa和bbb的最大公约数必定为1 == ccc,符合题意。当nnn为奇数时,我们也可以使c=1c原创 2021-12-17 13:08:31 · 649 阅读 · 3 评论 -
1619B. Squares and Cubes
题目链接思路每一个数是从1≤n≤1091 \leq n \leq 10^91≤n≤109,他开平方后取值ttt为 1≤t<4×1041\leq t < 4\times10^41≤t<4×104,开三次方后取值ttt为1≤t≤1031\leq t \leq10^31≤t≤103。所以对于每一个给出的nnn,我们只需让iii从111∼\sim∼n\sqrt{n}n遍历一遍,看i2,i3i^2,i^3i2,i3的值有多少在1∼n1\sim n1∼n之间即可代码#include<原创 2021-12-21 15:55:24 · 445 阅读 · 2 评论 -
1619A. Square String?
题目链接思路判断前后段字符串是否相等,两个指针遍历一遍就行了代码#include<iostream>#include<algorithm>#include<cstring>using namespace std;int main(){ int n;cin>>n; while(n--) { string s; cin>>s; int h = s.size();原创 2021-12-21 15:37:29 · 243 阅读 · 0 评论 -
1619C. Wrong Addition
题目链接思路字符串模拟即可,从字符串aaa后面取一个数,从字符串sss后面取一个个位数或两位数以保证一定大于从aaa中取的数,从后往前遍历即可,但需要注意两点当sss 比 aaa先遍历完时,输出-1。当sss中取出的数减去aaa中取出的数大于9时,bbb也不存在,输出-1。代码#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int原创 2021-12-21 16:01:26 · 441 阅读 · 0 评论 -
第四届“传智杯”全国大学生IT技能大赛(初赛B组)题解
基本上都是模拟,除了第四题都很简单1.T216906 组原成绩代码#include<iostream>using namespace std;int main(){ int x,y,z; cin>>x>>y>>z; int sumn = (x*20+y*30+z*50)/100; cout<<sumn<<endl; return 0; }2.T216907 报告赋分代码#include<iost原创 2021-12-19 20:29:50 · 7347 阅读 · 0 评论