![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数学
码海里的守望者
桃李不言,下自成蹊
展开
-
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 · 584 阅读 · 0 评论 -
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 · 181 阅读 · 0 评论 -
B. Flip the Bits
题目链接题意给你两个字符串,要求然你将字符串改变目的字符串,每次变动选择一个前缀,且前缀字符串中0和1的个数是相同的,问你是否可以将字符串变成,目的字符串。思路你要变肯定需要前缀字符串中01个数一样,如果不一样那么就没办法变化,所以抓住这一点,从前往后枚举,如果字符串匹配前一个字符和后一个字符在匹配时一个相同一个不同时,那么字符串在此刻就需要改变,因为相同的不需要改变,即使改变了还是需要变回来的,那么那么判断能不能会改变的条件就是01数目是否相等,不相等没办法将其变为目的串。#include &l原创 2021-04-08 17:18:26 · 253 阅读 · 0 评论 -
C. Petya and Exam
C. Petya and Exam题目链接题意你去参加考试,考试有两类题型,简单题和难题,简单题需要a时间解决出来,难题需要b时间解决出来,每道题到一定时时间会变成必做题,在这之前时非必做题,如果必做题没有写那么你将得到零分,问最多能得到多少分。思路能做简单题,先做简单题,但还要考虑时间限制,所以先将时间做一个从大到小的排序,最优的解法是什么呢,在这道题即将变到必做题的前一秒钟交卷,这样就能得到最多的分数,那么我在做每道题之前,先试探一下,将限制时间提前一秒钟去做当前问题,在还有剩余时间的同时去解原创 2021-04-02 21:32:36 · 75 阅读 · 0 评论 -
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 · 120 阅读 · 0 评论 -
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 · 311 阅读 · 0 评论 -
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 · 333 阅读 · 2 评论 -
D. Epic Transformation
D. Epic Transformation题目题目大意给你n个数,每次你可以从取出两个互异的数,取到不能取时,问最后原数组中还剩多少个元素。思路n为奇数时,不管怎么取都会剩下一个元素,n为偶数时,最好的情况最后数组中一个元素都没有了,在数组中相同元素的最大个数决定了最后数组还剩多少个元素,比如n为7时,最大元素个数是5,不管另外两个元素相同与否,最后序列都会剩下3个元素,当最大元素小于n的一半时,那么这里每个不同元素的个数都会小总数的一半,那么,那么互异元素个数,可以在这些数中存在一种分配方案原创 2021-03-27 18:37:00 · 388 阅读 · 0 评论 -
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 · 244 阅读 · 0 评论 -
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 · 410 阅读 · 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 · 501 阅读 · 0 评论 -
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 · 1118 阅读 · 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 · 150 阅读 · 0 评论 -
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 · 125 阅读 · 0 评论 -
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 · 78 阅读 · 0 评论 -
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 · 219 阅读 · 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 · 114 阅读 · 0 评论 -
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 · 113 阅读 · 1 评论 -
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 · 127 阅读 · 2 评论