
【思维】
文章平均质量分 55
CF题目
不牌不改
※ 接受自己很普通
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
牛客挑战赛59 —— A 木桩
题目题目链接题解贪心。大……大 小……小 大……大的方式排列,两端大的木桩尽可能相同,若大木桩数为奇数,则前少后多。这样可以保证[i,j]尽可能多,且每个[i,j]的正贡献不是0就是b(小木桩数量);对于所有的[i,a+b],前面的大木桩都会做负贡献-b,后面的大木桩的负贡献为0。因此总贡献为前面大数*后面大数*小数-前面大数*小数。代码#include <bits/stdc++.h>using namespace std;typedef long long LL;int原创 2022-04-29 11:29:10 · 314 阅读 · 0 评论 -
1044 Shopping in Mars (25 分)
题目题目链接题解二分。整体思路:计算累加和,枚举区间左端点,二分满足要求的区间右端点,记录左右端点。满足的条件,找到的右端点和左端点之间的和大于等于pay。但是我们枚举每个左端点二分到区间和可能不正好是pay,所以我们将差值作为键,以vector作为值保存全部差值为key的区间信息。产生了另一个问题,我们如何二分得到右端点?因为我们只能计算出前缀和,并不能直接计算出区间和,既然要求[l,r]区间和大于等于pay,那么我们只要要求[1,r]区间和大于pay+sum[l-1]即可,sum[i]表示原创 2022-04-16 20:11:18 · 460 阅读 · 0 评论 -
1010 Radix (25 分)
题目题目链接题解二分+数学。先说几点注意事项:开 LL;最高进制不是35,可以更高;枚举可能的进制时存在爆LL的情况;整体思路:先计算出知道进制的那个数对应的十进制数,二分进制,找到某个进制使得另一个数对应的十进制数与已知的十进制数相等,如果存在则输出最小进制,如果不存在则输出字符串。二分的上界并非z对应的进制,而是可以更大,所以上界应该为已知的十进制数(其实我还是不明白如何确定的这个上界);下界为未知进制的数中出现的最高字符对应的进制+1,再与2取max;写二分的check函原创 2022-04-11 11:13:24 · 1037 阅读 · 0 评论 -
蓝桥杯2019年第十届省赛真题-Fibonacci 数列与黄金分割
题目题目链接题解我未曾设想的道路。我居然以为是高精度的矩阵快速幂,差点心态崩了,直接看了题解……1 ~ 50 打个表,发现到20,小数点后八位就不变了,所以……,解决。代码#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 30;int main(){ LL n, f[N]; cin >> n; f[1] = f[2] = 1; for (int原创 2022-04-06 22:39:05 · 337 阅读 · 0 评论 -
蓝桥杯2019年第十届省赛真题-扫地机器人
题目题目链接题解二分+贪心。二分模板看到这道题第一时间想到的就是二分和动规。仔细一看二分有戏,能check出来,所以决定用二分好好想想。(主要是因为我动规太菜了,怕了)二分时间,准确的说我们二分的不是时间,而是覆盖范围,也就是枚举每个小机器人扫多少个方块;初始化l=1,一个小机器人最少扫一个,r=n,如果只有一个小机器人,那么它要扫全部。重点是check函数。如何判断每个小机器人扫m块地是否可行呢?一开始我的**(错误)思路**是以m为步长枚举每一段长度为m的区间,看看是不是存在小机器人原创 2022-04-06 22:02:46 · 1456 阅读 · 2 评论 -
蓝桥杯2020年第十一届国赛真题-重复字符串
说在前面,本题的标程是存在问题的,下面会分析标程与正确程序题目题目连接题解思维吧。整体思路:将字符串分割成k段,假设每段m个字符,我们统计每段相同位置的每种字符出现的次数,每段都统计上后,每个位置(0 ~ m-1)都取出现次数最多的字符作为要变成的字符,将每一段的对应位置的字符都变成这个字符就行了,因为这个字符在该位置出现最多,其他字符变到该字符能保证次数最少,如果要是变成别的字符,那么出现次数最多的字符变动次数会很多,并非最优解。累加每个位置(0 ~ m-1)上变换次数就是答案。关于标程出原创 2022-04-06 10:12:58 · 1274 阅读 · 4 评论 -
蓝桥杯2019年第十届省赛真题-修改数组
题目题目链接题解思维+并查集。难的不是使用并查集,而是看出来能用并查集。由于之前做过,有点印象,所以一下想到了并查集大概一说,fa[x]表示x要更新到多少,每次将x的fa更新为多少?更新为x+1?不一定,这得看x+1更新到了多少,如果x+1在之前都更新到了x+k,那么x肯定不能仅更新到x+1,而是更新到x+k+1。整体来看,我们x的更新取决于x+1,x+1取决于x+2,……这些数的fa值都可以指向同一个数x+k+1。有点并查集的意思吧。题解连接注意卡cin,cout。具体题解看别人原创 2022-04-05 21:51:14 · 629 阅读 · 0 评论 -
2020年蓝桥杯国赛-答疑
题目题目链接题解贪心。有点像“排队打水”。比较好想,而且我甚至都能证明。贪心思路:按照 s+a+es+a+es+a+e 从小到大排序即可。证明:首先,每个人的 sss 和 aaa 都可以看成是一个部分,记为 ddd,因为这段时间只是干的事不同,本质都是打卡前花费的时间。规定 pip_ipi 表示第iii个人,aia_iai 和 bib_ibi 分别对应第iii个人的 ddd 和 eee。排好序后为 P1P2...PiPi+1...PnP_1P_2...P_iP_{i+1}...原创 2022-03-19 17:05:01 · 1153 阅读 · 4 评论 -
2018年蓝桥杯省赛-日志统计
题目题目链接题解贪心,尺取。首先按照时间从小到大,对输入的每一组tststs和ididid进行排序;遍历每一对,取当前这对的tststs作为题目中的TTT,让另一个指针不断地向前走,直到指针所指的对的tststs大于等于了T+DT+DT+D就停止向前走,指针所经过的全部对的ididid都在[T,T+D)[T,T+D)[T,T+D)内,所以用cnt[i]表示第i个文章在[T,T+D)[T,T+D)[T,T+D)内被点赞的数量,如果数量大于KKK,则说明找到一个答案;指针到头了,我们的遍历就可以再进原创 2022-03-19 15:34:19 · 193 阅读 · 0 评论 -
2021蓝桥杯模拟赛-删除字符
题目题目链接题解贪心。贪心思路:将整个字符串视为若干段降序排列的子串,即从左边开始向右遍历,遇到逆序的就删除,再对新的串从头遍历找逆序,不停地重复整个过程是为了保证删除的尽可能靠前(贪心),如果整个字符串都顺序了,但是还要删,那么就从后面开始删,保留前面小的。代码#include<bits/stdc++.h>using namespace std;int main(){ string s; int t; cin >> s; cin >&g原创 2022-03-18 20:13:19 · 666 阅读 · 0 评论 -
CodeForces - 1456A Bouncing Ball
题目大意给出一个由 0,1 组成的序列,要从第 p 个位置开始,每次跳 k 个单位,要求跳出序列,只有当所有经过的位置都为 1 才合法。你可以花费 x 将这个序列的第一个元素删除(这个删除可以理解为要在确定 p 之前,跳之前进行),也可以花费 y 将其中一个位置改为 1 ,求能合法跳出序列的最小修改花费。题解dp[i]表示只通过搭柱子的方式(即消耗为x的方式)从第i个柱子上跳出去需要的花费;从后往前确定确定dp[i],转移方程:dp[i] = dp[i+k] + 若第i个柱子为0则+x,否则+0;;原创 2021-07-09 21:12:54 · 164 阅读 · 0 评论 -
CodeForces - 1114B Yet Another Array Partitioning Task
题目链接https://codeforces.com/problemset/problem/1114/B解题思路从大到小排序,找到最大的k * m个数;答案就是这k * m个数的和;遍历未排序的数组,每找到m个前k * m大的数就划成一段区间。(woc?这么简单我没想到????)注意:不可将排序后的第k * m个数当作下界去划分m个数;必须要选取前k * m个数作为划分数的集合。举个例子:排序前:2 2 2 2 5 5 5 1排序后:5 5 5 2 2 2 2 1假设k = 4, m原创 2021-06-09 11:10:15 · 135 阅读 · 0 评论 -
CodeForces - 985C Liebig‘s Barrels
题目链接https://codeforces.com/problemset/problem/985/C解题思路完整叙述我的思考过程(1h10min AC 我是fw)(题目中的l,我用d表示)如果题目要求最小值,大家应该都会。从小到大排序,选择最小的n个作为每个桶的短板,所以最小值为最小的n个板长之和;但是题目要求最大值,如果还按求最小值的贪心思路来求显然不对,例如,板子为1 1 2 2 2 2 3 3,桶数n为4,每个桶的板子数k为2,若按最小值贪心,分配方式为1 2、1 2、2 3、2 3,和原创 2021-06-09 01:13:19 · 153 阅读 · 0 评论 -
2017年蓝桥杯B组C/C++省赛-K倍区间
题目题解思维。暴力的话是会超时的,但也可以骗点分。(采用差分数组暴力)讲一下AC思路。统计出来每个前缀和取模kkk后结果的个数,比如 cnt[0]cnt[0]cnt[0] 表示前缀和取模 kkk 等于 000 的前缀个数;cnt[1]cnt[1]cnt[1] 表示前缀和取模 kkk 等于 111 的前缀个数;……假设前缀和取模kkk等于111的全部前缀如下:总共三个前缀,我们考虑任选其中的两个前缀,长前缀比短前缀多出的部分的数是否可以保证求和取模kkk等于000?假设短前缀和为 Su原创 2022-03-15 11:31:53 · 194 阅读 · 0 评论 -
2017年蓝桥杯B组C/C++省赛-分巧克力
题目题目链接题解二分。想到二分比实现二分要难点。可行解部分可以与不可行解部分完美地分隔开来。绿色部分是分成的巧克力比较小时都可以满足,而大于一定程度的时候就不可行了。所以可以将其抽象成小于可行,大于不可行的二分问题。在判断时,遍历全部巧克力,每个巧克力分割成的小巧克力数相加。分割成的小巧克力数目的计算方式为,高整除枚举到的xxx,宽整除枚举到的xxx的乘积。代码// #include<bits/stdc++.h>using namespace std;cons原创 2022-03-15 10:49:11 · 648 阅读 · 0 评论 -
蓝桥杯2017初赛-方格分割
题目题目链接题解思维。以(3,3)处的交点为起点(索引从0开始,注意是交点,不是格子)向四个方向前进,到达的点要进行标记,同时也向相对的方向前进,也进行标记,直到遇到边界停止前进,计数,最后答案除以4。绿色和蓝色轨迹是按照相反的方向前进得到的。除以4是因为最终达到边界上下左右存在四种对称的情况,所以除以4。额外说几点:拿到这个题,我的思路是直接同时从左上角的格子和右下角的格子dfs,当全部格子都被标记,且该行走方案的上下对称、左右对称、中心对称等方案都没出现过时,统计该方案。最终输出原创 2022-03-14 11:35:45 · 514 阅读 · 0 评论 -
P2782 友好城市
题目题目链接题解最长上升子序列。存在加强数据,动态规划的最长上升子序列只能过基础数据,O(n2)O(n^2)O(n2)。加强数据需要使用贪心优化的O(nlogn)O(nlogn)O(nlogn)做法。难点有二:想到先排序;想到用最长上升子序列.这种题想到先排序应该是要靠题量累积起来的,一开始我是直接按照输入顺序(即无序)进行遍历,要求只要第i个桥的两端城市坐标比第j个桥两端的城市坐标都大,那么就可以由第j个城市转移而来。但是样例就错了,所以想到了先对一端的城市排序,先保证一端的城原创 2022-03-11 19:42:39 · 492 阅读 · 0 评论 -
P1007 独木桥
独木桥 洛谷 兰顿蚂蚁 模拟 贪心原创 2022-01-15 08:59:36 · 442 阅读 · 0 评论 -
CodeForces 299C Weird Game
题目大意直接拿样例讲:input:201110001output:First第一行输入n,接下来两行,均为长度为2*n的字符串。两个人A和B,A先手,从第一个字符串中选择n个数字,B从第二个字符串中选择n个数字,每轮选一个,轮流进行。要求:若第一个字符串的第i个数字被A选过了,那么第二个字符串的第i个数就不能被B选了,同理选了第二个字符串,第一个字符串对应位置也不能选了;二者每次都进行最优选择;A胜输出First,B胜输出Second,平局Draw题解我一直觉得这题一个式原创 2021-07-23 20:32:22 · 211 阅读 · 0 评论 -
CodeForces 949A Zebras
题目大意将给定字符串分割成若干子序列(子序列:允许不相邻但按先后顺序选取若干字符构成的字符串),这些子序列要满足由01串构成且开始和结束字符必须为0。很显然每个字符只能出现在一个子序列中。先输出你构造出的子序列的个数;下面输出你构造的子序列,第一个数为子序列长度,后面跟着这个子序列每个字符对应于原字符串中的索引(从1开始),每行对应一个构造的子序列。对输出的唯一限制是要求输出的字符索引为升序。题解思路1:大佬思路,对应代码1:首先必然得存住答案才行,因此使用二维vector,ans[i]就代表原创 2021-07-22 21:22:39 · 198 阅读 · 0 评论 -
CodeForces 892C Pride
题目大意题目链接给你一个长度为n的数组a。每次操作你可以选择相邻的两个位置a[i],a[i+1],将其中某一个数用gcd(a[i],a[i+1])来代替。你的目标是最后将a中所有元素都变成1,问最少需要多少次操作。如果无论怎样最后a数组不能全变成1,那么输出-1;否则输出最少需要多少次操作。题解做过一次了。一开始的思路是,找俩最近且gcd=1的数,这两个数之间数的个数(含这俩数)-1就是将一个数组中的其中一个数换为1的最小次数,但是wa了;看cf数据后发现42 15 35按我的输出为-1,但实际原创 2021-07-21 12:40:42 · 248 阅读 · 0 评论 -
CodeForces 1312C Adding Powers
题目链接题目比较好理解不解释了题解对数组中的每个数都转换成k进制,统计每位上的个数和,若存在某一位上的和大于1,假设此位为第t位(从低位算起),那么这就说明只用一个k^t是不能够构成此数组的,输出NO。————————————————思路秒出,因为比较简单。但是我居然卡在如何实现k进制转化上了。。。。最后想了个歪门邪道实现的。代码1是实现k进制转化的标准方法;代码2是我的方法。代码1#include<bits/stdc++.h>using namespace std;ty原创 2021-07-21 11:52:03 · 185 阅读 · 0 评论 -
CodeForces 1015D Walking Between Houses
题目大意给定n,k,s。总共k+1个空,第一个空已经填上了1,用不超过n的正整数去填这些空。要求相邻数差的绝对值之和为s且必须保证相邻的数不相同。一个数允许被填多次。输出一种填法。题解构造,还行。eachstep = s/k得到平均每一步的值,即相邻数之差绝对值的平均值rest = s%k得到多出来的步数三种情况会输出 NO:eachstep > n-1说明相邻数之差绝对值的平均值大于n-1了,那显然不可能构造出来;eachstep == n-1 && res原创 2021-07-15 14:57:01 · 215 阅读 · 0 评论 -
CodeForces 920C Swap Adjacent Elements
题目大意给定一个序列,这个序列可以理解为一个1~n的全排列,再给出一个01串,1表示可以将索引i和i+1进行交换,且交换可以发生任意次,0表示不可以。问最后能不能将序列升序排列。题解几乎 秒杀,因为简单。判断每个索引处的数能不能回到自己应该在的位置即可,若都能回去,则输出YES,反之输出NO。当a[i]>i时,a[i]应当处于位置i,判断从位置i到a[i]-1是否都可以进行交换,即是否全为1,若全为1说明其可以回到应在的位置,反之不可以。类似的当a[i]<i时,判断从位置a[i]到原创 2021-07-15 14:37:57 · 212 阅读 · 0 评论 -
CodeForces 1025C Plasticine zebra
题目大意给定一个由w和b组成的字符串,可以操作任意次,每次操作(0次或多次)可以将字符串分割成左右两个子串,左、右侧子串均前后颠倒。问最终字符串中最多可以有多少个w和b交错(w和b无所谓顺序)。题解构造,比较好想。总述:当最左端字符与最右端字符不同时, max(左侧最长交错子串+右侧最长交错子串, 原最长交错子串)当最左端字符与最右端字符相同时,原最长交错子串详解:首先推断出试出最多操作一次,操作多了也没用。(这个我是通过试着造样例发现的这个特点)当第一个字符和最后一个字符一样的时候原创 2021-07-15 14:27:52 · 227 阅读 · 0 评论 -
CodeForces 1101C Division and Union
题目大意https://codeforces.com/problemset/problem/1101/C多段区间,分成两组,若不能保证从两组中任取一个区间都不会相交,则输出-1;能保证则输出每段区间所在的组号(1、2)题解贪心+思维按区间左端点从小到大排序;第一段区间一定属于第一组;每遍历一段区间,判断其左端点与第一组中全部区间的最大右端点的大小关系,若遍历到的区间的左端点大,则表示此段区间与任意一段属于第一组的区间都不相交,此区间放在第二组,也可以推断出其后面的均可以放在第二组保证不会与第一原创 2021-07-14 08:26:37 · 179 阅读 · 0 评论 -
CodeForces 900C Remove Extra One
题目大意题解只有满足a[j] > a[i]并且1~i-1的数里面>a[i]的数只有a[j]一个时,删除a[j]才能让records个数增加。因此可以看出此时在1~i的数里面a[j]是最大的,而且a[i]是次大的,只有这样才能保证删除a[j]时,a[i]成为records。我们遍历每个数都要维护最大值和次大值,若遍历到的数比最大值大,则更新最大值最小值,同时将新最大值的删除所能增加的records个数设置为-1,因为,最大值本身就是一个records,若删除它相当于-1;若遍历到的数值在最原创 2021-07-14 07:57:14 · 183 阅读 · 0 评论