自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

菜菜的博客

有更好的想法欢迎一起探讨

  • 博客(28)
  • 收藏
  • 关注

原创 E. Permutation by Sum

E. Permutation by Sum题目链接题目大意给你一个数n,和一个l~r的区间,和一个目标值,问你能让1到的n的排列,使得l至的r之间的和为目标值,如果找不到输出-1思路首先一个这个区间有个最大值n,n-1…n-r+l和一个最小值1,2,3,…r-l+1,目标值在这个区间内是合法的,否则就输出-1,如果合法那么,先找目标值和区间最小和的差值,然后将这个差值除以这个区间元素的个数,然后将这个这个值,加到最小值中的每一位元素上,如有有余数,需要重新加上,然后在区间前的元素先输出,然后输出区

2021-04-13 15:43:03 361

原创 D. Min Cost String

D. Min Cost String题目链接题目大意定义一个字符串,如果满足s[i]=s[j]并且s[i+1]=s[j+1],那么就有一个价值,要求给你一个k表示只能使用前k个字母,构造出长度为n的字符串,使其价值最小。思路由于你只能用前k个字母,把么第一层放由a到a+k的字母,第二层交叉着放第上一维的字母和当前遍历到的前k个字母,这样可以拿到最小的价值。#include <bits/stdc++.h>#pragma GCC optimize("Ofast")#pragma GC

2021-04-13 11:41:39 464

原创 C. Add One

C. Add One题目连接题目大意给你一个数然后进行k次操作,要求让你对每一位加一。问k次操作后这个数会变成多少位。思路每一位加一变化时,只有9加一会多变出一位,那么进行预处理,用二维数组进行dp,先看9加1到10,多出1位,dp[0~9][k次操作],8加2呢是不是也是10,那么dp[8][2]=dp[9][1],那么这样子在不等于9的情况下,dp[i][j]=d[i+1][j-1],如果为9时,使得结果是由上面式子如何推出呢?,其实可以这样理解dp[9][j]=dp[10][j-1],而10

2021-04-12 21:58:48 601

原创 C. The Phone Number

C. The Phone Number题目连接题目链接给你一个数,让你将从1~n 的排列中,输出这个序列中最上升和最长下降子序列之和最小的序列。思路将n开方取整,然后按照这个长度分成一些段,然后每一段按照降序排列,这样得到的就是最优解。通过代码#include <bits/stdc++.h>#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")#pragma GCC optimization ("unro

2021-04-09 15:20:08 203

原创 B. Flip the Bits

题目链接题意给你两个字符串,要求然你将字符串改变目的字符串,每次变动选择一个前缀,且前缀字符串中0和1的个数是相同的,问你是否可以将字符串变成,目的字符串。思路你要变肯定需要前缀字符串中01个数一样,如果不一样那么就没办法变化,所以抓住这一点,从前往后枚举,如果字符串匹配前一个字符和后一个字符在匹配时一个相同一个不同时,那么字符串在此刻就需要改变,因为相同的不需要改变,即使改变了还是需要变回来的,那么那么判断能不能会改变的条件就是01数目是否相等,不相等没办法将其变为目的串。#include &l

2021-04-08 17:18:26 267

原创 01背包

01背包有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi,求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。思路每个物品只有一件,考虑拿与不拿,在前i件物品中,拿第i件物品与不拿第i件物品,其限制条件是背包的空间,那么状态可表示为dp[前i件物品][背包容量],当前状态依赖于之前的状态,考虑前i件物品拿与不拿,状态转移方程可表示为,dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]),不拿第i件物

2021-04-06 18:33:57 68

原创 C. Long Beautiful Integer

C. Long Beautiful Integer题目链接题目大意给你一个序列,长度为n,值为x,让你构造出一个序列,使得b[i]=b[i+k],并且这个序列大于等于原序列的值。思路由b[i]=b[i+k]可知后面序列都是重复前k个数的值,那么你就可以知道,那么要想大于原序列可以从前k个数从后往前枚举,如果后面对应的数大于前面的的数,那么让第k个数加1,这样就能大于原序列,如果第k个数加1变成两位数后应向前进一,第k为归零。通过代码#include <bits/stdc++.h>

2021-04-03 11:19:16 142

原创 C. Petya and Exam

C. Petya and Exam题目链接题意你去参加考试,考试有两类题型,简单题和难题,简单题需要a时间解决出来,难题需要b时间解决出来,每道题到一定时时间会变成必做题,在这之前时非必做题,如果必做题没有写那么你将得到零分,问最多能得到多少分。思路能做简单题,先做简单题,但还要考虑时间限制,所以先将时间做一个从大到小的排序,最优的解法是什么呢,在这道题即将变到必做题的前一秒钟交卷,这样就能得到最多的分数,那么我在做每道题之前,先试探一下,将限制时间提前一秒钟去做当前问题,在还有剩余时间的同时去解

2021-04-02 21:32:36 88

原创 B2. K for the Price of One (Hard Version)

B2. K for the Price of One (Hard Version)题目链接题目大意给你n件商品,你可以一次性买k件商品,付其中最贵的商品一件的价格,或者你单独买一件,付一件的钱,问你最多能买多少件商品。思路n件商品价格先排序,从小到大拿,这样是最优的的,当一次性拿k件商品时,肯定在k-1件商品中选价格差最小的物品。在物品拿的物品数没有超过k时,先将前k个物品拿入,当拿的物品超过k时,那么就当前位置的到前k件物品的价格清除只付当前物品的钱,依次往后枚举#include <bi

2021-04-01 13:51:01 131

原创 C. Planar Reflections

C. Planar Reflections题目C. Planar Reflections题目大意给你一个粒子,n面墙,衰变周期为k,当遇到一面墙时,会分裂出有一个周期为k-1的粒子,并朝反向运动,当衰变周期变为1时,该粒子就不会分裂了,问会分成多少个粒子。思路每个粒子的运动方向不会改变,那么到最后不会分裂情况有2种,一种是粒子还能分裂但是,运动方向前面已经没有墙了,还有一种就是,粒子运动方向有墙,但衰变周期,已经变为了1,无法分裂。那么在往上一维考虑,在面临第i(i<n)面墙的粒子(k&g

2021-03-31 13:31:44 329

原创 C - ORXOR

C - ORXOR题目题意给你一个序列,让你将区间分成几段连续的子区间,每个子区间里面元素进行或运算,区间与区间之间进行异或运算。求出能得到的最小值。思路给你n个数,有多少个组合,选1个,选2个…选n个,即共有2n2^n2n种组合,那么就可以用二进制枚举,第一层循环枚举所有可能情况,第二位,枚举子区间里的元素进行或运算,区间与区间之间进行异或运算。通过代码#include <bits/stdc++.h>#pragma GCC optimize("Ofast")#pragma

2021-03-30 15:10:16 349 2

原创 D. Epic Transformation

D. Epic Transformation题目题目大意给你n个数,每次你可以从取出两个互异的数,取到不能取时,问最后原数组中还剩多少个元素。思路n为奇数时,不管怎么取都会剩下一个元素,n为偶数时,最好的情况最后数组中一个元素都没有了,在数组中相同元素的最大个数决定了最后数组还剩多少个元素,比如n为7时,最大元素个数是5,不管另外两个元素相同与否,最后序列都会剩下3个元素,当最大元素小于n的一半时,那么这里每个不同元素的个数都会小总数的一半,那么,那么互异元素个数,可以在这些数中存在一种分配方案

2021-03-27 18:37:00 405

原创 E1. Square-free division (easy version)

E1. Square-free division (easy version)题目标题题目大意给你一个序列要求,要求你分成连续的段,每段里面任意两个数相乘不为平方数,问最少能分成几段。思路任意两个数之积为平方数,可以从这个数拆分成最小质数幂次方之积来考虑,例如a= r1x∗r2y∗r3z..........rnwr_1^x*r_2^y*r_3^z..........r_n^wr1x​∗r2y​∗r3z​..........rnw​ 是质数拆分后的形式,两个数相乘想为平方数,那么只需要考虑质因数

2021-03-23 11:27:52 260

原创 B. Restore Modulo

B. Restore Modulo题目题目大意给你一个序列,问你是否能按照题目所给的构造方法使m最大将序列构造出来,如果m无穷大输出0思路当一个序列递增或者递减时,这时肯定存在无穷个m,可以构造出原来的序列,此时m无穷大,一个序列如果前一个数比后一个数大的话,那么它们的差值就是c,如果前一个数比后一个数小的话,那么二者的差值就是m-c,所以你每次只需要询问二者差值是否为这两个数其中之一就可以了,如果不是则输出-1。#include <bits/stdc++.h>#pragma G

2021-03-22 16:31:18 435 1

原创 离散数学:逻辑和证明

逻辑和证明命题是一个或真或假的陈述语句,即一个陈述事实的句子,但不能既真又假。核心1.陈述句,2.是一个命题,3.非真即假。1.x+1=42.几点了?3.仔细阅读这个语句1不是命题因为他们既不真也不假,如果给语句1中变量赋值,那么语句1可以变成命题。语句2,3不是命题,因为他们不是陈述语句。假如我们用p表示一个命题,那么p的否定就可表示为 ¬\neg¬p,即不是p所说的情形,即¬\neg¬p与p的真值相反今天是周一非:并非今天是周一(今天不是周一)合取令p,q为命题。p,q的合取用p

2021-03-19 17:11:09 724 1

原创 C2. k-LCM (hard version)

C2. k-LCM (hard version)题目题目大意给你一个数n,让你将其划分为k个数,并且这k个数中最小公倍数不得超过n/2。思路其实这道题目和简单版差别不大,简单版本中,如果n为奇数,那么你就输出n/2,n/2,1。那么在难版本中呢,k>3的部分输出1,剩下输出n/2,n/2,1,当然这里需要判断输出了k-3之后n为奇还为偶,在简单版本中,n为偶数时是不是先判断下,能不能被4整除如果能被4整除,那么就输出n/2,n/4,n/4,如果不能那就输出n/2-1,n/2-1,2,那么在

2021-03-19 15:02:50 540

原创 Codeforces Round #708 (Div. 2)B. M-arrays

B. M-arrays题目题目大意在一个给定的序列中让你重新划分子系列使得每个子序列里面相邻的元素相加之和能整除m,并且尽可能是的区间分的少。问最少能分多少个区间解题思路不管输入给数的有多大,加法取模可以先将加数取模(0不需要考虑),这样可以将原本不相同的数存放在同一个映射中,那么在询问是否有数之和能取模m,就是通过映射询问m-i的个数是否为0,如果不为0,最优的方法就是i与m-i间隔开来放,如果二者个数之差大于2,那么就需要将多余的元素逐个放在单独的区间,如果为0,就需要将i上的映射个数作为区

2021-03-18 13:20:01 1133 3

原创 Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)C. Going Home

C. Going Home题目大意在一个数组中问你是否存在4个下标不同的数,是的两两之和相等思路两两之和肯定需要枚举,在枚举时,将之和存入另一个维护数组中记录两个下标,如果当前维护数组的没有记录该和的下标就将其压入数组中,如果已经存在就判断维护数组的下标与当前该和的两个下标是否相同,如果都不相同则输出四个下标,结束程序。否则遍历结束时输出NO。通过代码#include <bits/stdc++.h>#pragma GCC optimize("Ofast")#pragma GCC

2021-03-17 12:24:41 173

原创 Codeforces Round #706 (Div. 2)D. Let‘s Go Hiking

D. Let’s Go Hiking题目题目大意A,B两个人走棋,A为先手且必须走下坡路,B为后手且必须走上坡路,当无路可走时那么他就输了,i且二者不能碰头,碰头时,双方无路可走。思路A为先手为劣势状态,A只能走下坡路,所以当一条路单调时,B可以堵在它下坡路的第一个位置,那么A将无路可走,所以A必须选择为与波峰转折点的位置,这样B就不会一下将A堵死,,如果有多个波峰转折点时,那么可能的情况就是多个波峰我只有拿上升或或者下降度最大的,否则那其他都会被堵,但是这里优惠有一个问题,B作为后手那么他可

2021-03-15 22:10:21 138

原创 Codeforces Round #706 (Div. 2)C. Diamond Miner

C. Diamond Miner题目思路先对x轴上的点与y轴上的点取绝对值排序,然后从小到大依次取x与y,这样得到的值最小AC代码#include <bits/stdc++.h>using namespace std;#define ll long long#define sl(n) scanf("%lld",&n)#define pl(n) printf("%lld",n)#define sdf(n) scanf("%lf",&n)#define pdf

2021-03-14 11:09:08 91

原创 Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)B. Napoleon Cake

B. Napoleon Cake题目题目大意从小到大一层一层浇灌奶油,问有多少块面包会被浸上奶油。解题思路从后往前遍历,每次维护当前i和a[i]差值加一的最小值,如果i大于在这个最小值那么奶油会被浸上,否则就不会。输入样例360 3 0 0 1 3100 0 0 1 0 5 0 0 0 230 0 0输出样例1 1 0 1 1 1 0 1 1 1 1 1 0 0 1 1 0 0 0 #include <bits/stdc++.h>using nam

2021-03-13 21:51:42 236 1

原创 Codeforces Round #706 (Div. 2)B. Max and Mex

Codeforces Round #706 (Div. 2)B. Max and Mex题目题目大意刚开始给你n个不同的数,k次询问每次求在该序列中已存在的最大的数和不存在的最小的数(大于等于零)的和除以2想上取整在插入原序列中,经过k次询问后求序列中有多少个不同的元素。输入样例54 10 1 3 43 10 1 43 00 1 43 20 1 23 21 2 3输出样例44353解题思路题目给你k的范围最大到1e9,那么肯定就是有规律可寻的,一共有三

2021-03-13 18:25:30 130

原创 B. Planet Lapituletti

B. Planet Lapituletti题目题目大意给你一个时间,然后让你找到往后的时间中在镜子中的合法时间(包括给你的起始时间),然后输出真实世界中的时间。思路显然3,4,6,7,7,9在镜子中的时间是不合法的,所以直接跳过往后面找,分钟和时钟,二者时间变化用两重循环满足其时间变化,而镜子成像满足映射关系,用一个map存储其中的映射关系,真是世界中是从左往右读数,镜子是从右往左,所以在判断时,对应的十位与个位要交换顺序,并判断是否超过了进制,如果都没有超过进制值输出已经找到的时间,如果在循环

2021-03-09 13:40:31 264

原创 TCP协议的连接的三次握手与断开连接地四次挥手

TCP协议的连接的三次握手与断开连接地四次挥手三次握手1.第一次握手:客户端给服务端发送一个连接请求SYN报文,在当服务端接收到连接请求报文时,服务器这时知道客户端发送能力正常。2.第二次握手:服务端在收到第一次握手连接请求SYN报文后,服务器发送确认收到报文ACK+SYN报文,这里服务器在向客户端表明我已经收到了你的连接请求SYN报文,并且证明我的发送能能力没有问题。3。第三次握手:客户端收到ACK+SYN报文后,回复服务端一个ACK确认收到报文,这里是向服务端表明我的接收能力没有问题。通过三次

2021-03-05 10:55:36 153 3

原创 Codeforces Global Round 13B. Minimal Cost

Codeforces Global Round 13B. Minimal Cost一.题目输入样例32 3 42 22 3 43 22 4 33 2输出样例733思路仔细读题后,你可以发现第一列和最后一列没有放障碍物,降低了题目的难度,我可以从a[1][0]直接走到a[n][0],在几何图形你可以发现,只要存在a[i][j]与a[i-1][j]绝对值之差大于等于2,那么就可以绕过障碍物直接通过。另外两种情况是障碍物全在一列上,障碍物列之差为一,全在一列上时,可以水平推

2021-03-04 22:17:08 124 1

原创 Codeforces Round #702 (Div. 3)D. Permutation Transformation

D. Permutation Transformation题目输入样例353 5 2 1 41144 3 1 2输出样例1 0 2 3 1 0 0 1 3 2 解题思路递归,当每次找到区间里的最大值时,以这个最大值将区间再分左边区间和右边区间,递归继续查找最大值,在每次重新分区间时,注意已经找到最大值的下标,不能再放进去,每递归一层那么深度就加一,而存储数组可以用结构体,x存读入数的大小,y存深度。#include <bits/stdc++.h>#defi

2021-02-21 18:32:53 1398 4

原创 Codeforces Round #703 (Div. 2)B. Eastern Exhibition

B. Eastern Exhibition解题思路这是个思维题想要到达各个点距离最小,首先你可以发现在二维空间里,x轴坐标与y轴坐标是互不干扰的,那么降一个维度考虑,在x轴坐标上存在多少个点到各点之间距离之和最小,在y轴坐标上存在多少个点到各点之间距离之和最小,因为x轴坐标与y轴坐标是互不干扰的,所以组合一下乘起来,那么怎么求在x轴坐标与y轴坐标有多少距离之和最小的点的个数呢,当n为奇数时取x轴坐标与y轴坐标中位数的那个点最小,奇数个数的中位数只有一个所以只存在一个点到各个点距离之和最小,偶数时中位数

2021-02-19 15:15:40 140 2

原创 B. Replace and Keep Sorted前缀和

B. Replace and Keep Sorted前缀和Given a positive integer k, two arrays are called k-similar if:they are strictly increasing;they have the same length;all their elements are positive integers between 1 and k (inclusive);they differ in exactly one position

2021-02-14 10:03:25 1376

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除