思维
思维算法题
张小生的先生
你要觉得我博客还行,就点赞加个关注,有意深聊的可以私信,随时欢迎,当然有女性想深聊的我更欢迎,要是男性的话不建议私聊,我跟一大老爷们真聊不起来。我人品五五开,胆小不好色,对女性要求不高但要识大体,样貌看得过去就行,其它的也就那样了。我不仅把这个当作学习博客也当作一个招友的圣地,希望在这里遇见更好的你。
展开
-
[Codeforces Round 132 (Rated for Div. 2)] B. Also Try Minecraft
每日一题原创 2022-07-31 13:18:03 · 337 阅读 · 0 评论 -
[“深圳计算科研院杯“E起来编程暨第三届湖北省赛] D.WA (优先队列)
题目链接:D.WA题解维护出相邻a之间的长度以及左右下标,按照长度从小到大放入优先队列,显然队首出队的永远是长度最小的,我们就将该区间内的字母全部变为a即可。注意第一次出现a往前的区间以及最后一次出现a往后的区间没有考虑。所以如果k有剩余就考虑这两个区间,不断变a即可。代码#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<bits原创 2021-05-06 19:10:00 · 316 阅读 · 0 评论 -
[Codeforces Round #708 (Div. 2)] E2. Square-free division (hard version) (尺取预处理+dp)
题目链接:E2. Square-free division (hard version) 题解本题E1的解法是先把每个数的所有平方因子杨了(ec-final学了一手),然后判断当前数是否曾经出现过,如果出现则说明需要在此划分,否则继续向下遍历。但E2加了一个条件可以更改k个数。首先我们需要清楚一点,假如前i个数有两个重合的,那么我们通过更改重合的那个数是否一定能使前i个数不重合,或者是否能保证更改后也一定不和后面的数重合。E2的做法同样是先把平方因子杨了,所以假如重合了,更改后的那个数把平方因子杨原创 2021-04-27 21:46:42 · 162 阅读 · 0 评论 -
[Codeforces Round #717 (Div. 2)] D.Cut (倍增)
题目链接:D. Cut题意给一个长度为n的数组,有q次查询,每次查询给定一个区间[l,r],问该区间能至少划分成多少个连续子区间使得子区间里的数两两互质。题解我们首先可以预处理得到以每个点x作为右端点向左划分一个子区间时的左端点的下标f[x]。用dp[i][j]{dp[i][j]}dp[i][j]表示以j为区间右端点向左划分2^i个子区间后的左端点下标初始化:dp[0][x]=f[x]{dp[0][x]=f[x]}dp[0][x]=f[x]转移方程:dp[i][j]=dp[i−1][dp[i−原创 2021-04-24 22:16:45 · 208 阅读 · 0 评论 -
[Codeforces Round #717 (Div. 2)] C. Baby Ehab Partitions Again (01背包+思维)
题目链接:C. Baby Ehab Partitions Again题解用dp判断一开始是否需要删除数字,如果需要,我们只需删除最低位为1的那个数即可。貌似许多人2e9的时间复杂度也能过,就离谱。代码int a[maxn],sum;int dp[maxm];int book[maxn],n;vector<int> p;bool f(){ memset(dp, 0, sizeof(dp)); p.clear(); sum=0; dp[0]=1; for(int i=1原创 2021-04-23 12:19:17 · 231 阅读 · 0 评论 -
[UVA - 11210] Chinese Mahjong 模拟
题目链接:UVA - 11210题解蓝书讲的很清楚,但是美中不足的是最后其实可以不用dfs判断,完全可以枚举,有的题可能会卡你dfs,比如2021 icpc的昆明~代码原创 2021-04-20 16:55:39 · 154 阅读 · 0 评论 -
[2021 icpc昆明] K.Riichi!! 模拟
题目链接:K.Riichi!!题解为了做这道题还专门练习了刘汝佳蓝书的麻将题,结果蓝书dfs判断胡牌的方法用在昆明这道题时会超时,而且蓝书专门提到"1s1s1s1s1s"这种bug,昆明竟然不判就A了,特判一下还就WA了,真的坑。。。麻将题的关键在于判断胡牌的方法,目前做的麻将题胡牌都是四个刻字或顺子外带一将,没有考虑到清七对的胡法。我们只需枚举一将是哪一种牌,然后判断剩下的是否能组成刻字或者顺子即可。如果不胡牌那就取出一张放另外一张,然后判断胡牌即可,上文提到的“1s1s1s1s1s”这种bug,原创 2021-04-15 22:08:16 · 289 阅读 · 0 评论 -
[2019 ICPC Asia-East Continent Final] M. Value 状压+搜索
题目链接:M. Value题解本题如果直接暴力肯定会T。但是如果将整个序列分组再搜索,那么时间复杂度就会大大减少。按 xk{x^k}xk (k≥1) 分为一组例如 2,3,5,6,7,10。。作为每一组的开头,组内的元素就是开头的k次幂。很显然每一组的大小最多不超过log21e9{log_2^{1e9}}log21e9,暴力搜索每组每个元素是否被选取即可。代码#include<iostream>#include<algorithm>#include<cst原创 2021-04-10 17:58:20 · 230 阅读 · 0 评论 -
[NWERC 2019] E. Expeditious Cubing 浮点数精度判断
题目链接:E. Expeditious Cubing题意一个人有五个成绩,计算最终成绩时需要去掉最大和最小值。现在已知四个成绩和目的成绩,问第五个最大是多少情况下满足小于等于目的成绩,题解本题的贪心思路不难,就不多说了。关键点在于浮点数判断大小的精度问题上。由于计算机存储空间有限,不能和理论值相媲美,所以通常对于浮点数相等判断我们需要一个误差值eps来作为一个衡量标准。代码#include<cmath>#include<iostream>#include<cst原创 2020-11-22 20:24:47 · 338 阅读 · 0 评论 -
合并排序
递归版的合并排序#include <stdio.h>#include <stdlib.h>#include <string.h>const int maxn=1e5+10;int b[maxn],num[maxn];void Merge(int l,int r){ int mid=(l+r)/2; int i=l,j=mid+1; int k=l; while (i<=mid || j<=r) { if(j>r || (i&原创 2020-10-08 20:43:43 · 85 阅读 · 0 评论 -
2020牛客暑期多校训练营(第三场) E.Two Matchings 构造+dp
题目链接:Two Matchings题意让你构造两个序长为n,列p,q,这两个序列各个位都不相同,并且满足pi≠i且ppi=i{p_i≠i 且p_{p_i} =i}pi=i且ppi=i。给你一个序列a,可以计算一个值(∑i=1nabs(ai−api))/2{(\sum_{i=1}^{n}abs(a_i-a_{p_i}))/2}(∑i=1nabs(ai−api))/2,找符合条件的p、q中,计算值之和最小的是多少。题解本题先来分析p、q序列,题目中给出pi≠i且ppi=i{p_i≠i原创 2020-09-04 16:23:17 · 142 阅读 · 0 评论 -
[Codeforces Round #666 (Div. 2)] B. Power Sequence 暴力枚举
题目链接:B. Power Sequence题意给你一个长度为n的序列a,让你通过一些操作使其变成一个叫“power sequence”的序列——存在一个c使得(0≤i≤n-1),ai=ci{a_i=c^i}ai=ci。你能够更改序列里每个元素的位置,这个操作不计入操作数内。你可以选择任意一个元素增加或减少1,每进行一次这个操作,操作数+1。问最少需要多少操作数使其变为“power squence”。题解本题我们先来分析,ai≤1e9,n≤1e5{a_i≤1e9,n≤1e5}ai≤1e原创 2020-08-31 15:03:48 · 1036 阅读 · 0 评论 -
[Educational Codeforces Round 94] D. Zigzags dp预处理+枚举
题目链接:D. Zigzags题意给你一个长度为n的序列a,让你找符合条件的四元组有多少个。四元组(i,j,k,l),其中1≤i<j<k<l≤n{1≤i<j<k<l≤n}1≤i<j<k<l≤n,并且a[i]=a[k],a[j]=a[l]{a[i]=a[k],a[j]=a[l]}a[i]=a[k],a[j]=a[l]。题解本题一开始难以入手,不知如何枚举。其实我们可以尝试一下如果枚举i和j,a[k]和a[l]的大小确定了,但是位置无法确定,k原创 2020-08-26 20:36:48 · 227 阅读 · 0 评论 -
[Educational Codeforces Round 94] B. RPG Protagonist 贪心+思维
题目链接:B. RPG Protagonist题意有两个人A能拿p单位的原料,B能拿f单位的原料。有两种武器剑和斧头,一把剑需要s个原料,储备间只能做cnts把剑;一把斧头需要w个原料,储备间只能做cntw把斧头。问A和B最多拿多少把武器。题解其实这个用到了高中数学的方法——列不等式组。首先很容易想到哪个花费的材料最少就先制作这个武器。我们设A制作了s1把剑和w1把斧头,B制作了s2把剑和w2把斧头。根据题意可以列出不等式方程组。{s∗s1+w∗w1≤p,s∗s2+w∗w2≤f,s1+s2≤原创 2020-08-26 16:14:52 · 187 阅读 · 0 评论 -
[2019CCPC-江西省赛] D - Wave 暴力/dp
题目链接:D - Wave 题意给你一个长度为n的字符串,字符串只包含1~c数字,让你找一个子字符串要求子字符串的奇数位为一个数,偶数位为一个数并且奇数位和偶数位不同。题解本题有一个关键点c≤100,很明显我们可以通过枚举奇数位和偶数位的数字来得到答案。当奇数位为i,偶数位为j时,我们可以先统计哪些位置的数字为i,哪些位置的数字为j。然后不断二分去扩展长度,如果无法二分,那么就停止扩展。这是暴力解法,时间复杂度为O(c2log(n)){O(c^2log(n))}O(c2log(n))当然这道题也原创 2020-08-24 15:14:49 · 241 阅读 · 0 评论 -
[ BAPC 2016 ] Rock Band 暴力
题目链接:Rock Band题意给你一个n行m列矩阵,每行为1~m的一个排列,让你找一个以第一列为起点的n*x的子矩阵使之其中的元素在子矩阵外未出现。x应该尽可能小,最后输出子矩阵里不同元素的个数以及将子矩阵的元素从小到大输出。题解由题意可知,每行为1~m的一个排列,如果一个元素只在子矩阵出现,那么代表这个元素必须出现n次。我们可以从第一列开始向右遍历,统计未标记的元素个数,如果出现过的元素个数达到n个则从统计个数减去,每遍历一列就判断统计个数是否为0,如果为0代表符合条件,否则继续遍历。代码原创 2020-08-18 12:08:44 · 248 阅读 · 0 评论 -
[Codeforces Round #657 (Div. 2)] B. Dubious Cyrpto 构造
题目链接:B. Dubious Cyrpto题意给你一个等式n∗a+b−c=m(l≤a,b,c≤r,1≤m≤1010,1≤l≤r≤500000){ n*a+b-c=m (l≤ a,b,c ≤r ,1≤m≤10^{10} ,1≤l≤r≤500000)}n∗a+b−c=m(l≤a,b,c≤r,1≤m≤1010,1≤l≤r≤500000),其中n,a,b,c,l,r,m都为正整数,输入l,r,m,求a,b,c的值。题解以开始以为是二分,后来发现是构造。易知:m=⌊ma⌋∗a+m%a{易知:m=\lf原创 2020-07-29 16:00:47 · 140 阅读 · 0 评论 -
[Codeforces Round #657 (Div. 2)] A. Acacius and String
题目链接: A. Acacius and String题意给你一个含有小写字母和“ ?”的字符串," ? "可以用任何字母代替,问是否可以用小写英文字母替换所有问号,这样字符串“ abacaba ”作为结果字符串中的子字符串恰好出现一次。题解本题中只出现一次是关键点,很可能出现字符串中已有“abacaba”,我们无需再将“ ?”代替为“abacaba”中的一个。所以我们像尺取一样,每读取7个字符,判断是否为“abacaba”或者可以变为“abacaba”,如果是则将其变为“abacaba”,然后其它原创 2020-07-29 15:35:59 · 197 阅读 · 0 评论 -
[2020牛客暑期多校训练营第五场] D. Drop Voicing 思维+LIS
题目链接:D.Drop Voicing这个题多亏队友的思路才让我醍醐灌顶,有解可寻。题意给你n个数的一种排列,对这个数列有两种操作。[第一种] Drop-2:把第二高位移到最低位,如pn−1,p1,p2,.....,pn−2,pn{把第二高位移到最低位,如p_{n-1},p_1,p_2,.....,p_{n-2},p_{n}}把第二高位移到最低位,如pn−1,p1,p2,.....,pn−2,pn[第二种] Invert:把最低位移到最高位,如p2,p3,.....,pn−1,pn,p原创 2020-07-29 10:01:06 · 145 阅读 · 0 评论 -
[2020牛客暑期多校训练营第五场] F.DPS 思维模拟
题目链接 F.DPS又是一个雷声大雨点小的题,看来题不可貌相啊。一看输出又双叒叕以为是一个难题,没想到是第二个签到题,但这个签到签到的并不怎么成功。题意题目大意是输入n个数,然后按照要求输出相应的图案。题目给了一个公式:si=⌈50dimaxidi⌉{s_i= \lceil 50\frac{d_i}{max_id_i}\rceil }si=⌈50maxididi⌉,大意就是这个数除以n个数里最大的数然后乘上50向上取整。得到的这个si{s_i}si为下列 ”-“ 的个数。例如:如原创 2020-07-28 22:23:38 · 163 阅读 · 0 评论 -
[2020牛客暑期多校训练营第五场] I.Hard Math Problem 思维题
题目链接 I.Hard Math Problem题意一看Hard Math,以为又是一道难题,没想到竟然是个签到题。大意是给你n*m的矩阵,以及三个角色:总部、金矿工和收藏家,在矩阵的每个点放置一名角色,要求总部H的旁边至少有一个金矿工G和收藏家E。问如何排布能使这种总部数量最多。题解一开始以为按照GHEHGE…排布,答案是0.5。但由于题目要求是m,n->∞{\infty}∞,最后发现还有更加巧妙的。(说实话答案可以猜,但真不好想)大致排列方式如下,可以看出G、E都是隔一行出现,并且以斜着原创 2020-07-28 20:52:17 · 186 阅读 · 0 评论 -
[2020牛客暑期多校训练营第三场] L.Problem L is the Only Lovely Problem 字符串函数
题目链接:L.Problem L is the Only Lovely Problem前言:一般是不写签到题的,但这次例外,原因是我牛客比赛第一次一眼瞄到了签到题,但却由于字符串的一些函数忘了导致没能很快地切出这个签到题。属实很难受,但这也反映了我对c++函数使用并不熟练,以后有关函数使用的我会单独开个模块,遇到了写一篇,以便赛前温习用。题意:给你一个字符串,判断前6个字母是否为"lovely",不区分大小写。是输出"lovely",否输出"ugly"。题解:本题若想快速求解,用c++自带的转变小写函原创 2020-07-19 13:10:20 · 178 阅读 · 0 评论 -
[2020牛客暑期多校训练营第三场] A.Clam and Fish 贪心
题目链接:A.Clam and Fish前言:感觉自己读题不仔细,A题本来就是一个简单贪心,就因为读题时漏了这个,以为上一stage的fish和clam能保留至这个阶段。这个惨痛的经历告诉我没搞清楚题意前坚决不开写。题意:游戏有n个stage,每个stage有4种状态,各个stage之间互不影响,上一个stage的fish和clam不能保留至这一阶段,唯一能保留的就是鱼饵fish bait。同时在每个stage你可以有题目给出的四种操作,问如何操作使得最后得到的鱼数量最多。题解:通过题意易得,每次操作原创 2020-07-19 12:29:34 · 202 阅读 · 0 评论 -
[2020牛客算法竞赛入门课第一节习题] 糖糖别胡说,我真的不是签到题目
题目链接:糖糖别胡说,我真的不是签到题目题意:分为编号为0和1两个阵营的n个人排成一列,每个人有一个能力值,在第i秒时,第i个人能消灭前面和他不同阵营并且能力值小于他的人。游戏还有buf,会有m次提高能力值的机会,在第(c[i])s,b[1]到b[c[i]]个人能力值会增加1。问最后存活人数。题解:这里引用官方题解总结一下,我消灭的都是我前面的,而我前面的能力buf都已经加成完了,所以用最后能力值判断即可。倒着判断便于把两个不同阵营的最大值分别存储,小于对方阵营最大值即被消灭。代码#incl原创 2020-07-15 11:07:40 · 333 阅读 · 0 评论 -
Python仿金字塔输出
Python仿金字塔输出这是一道用 ’ * ’ 输出仿金字塔的题目!注意:金字塔右对齐n=int(input())i=nfor i in range(n,0,-1): print(" "*(n-i)+"*"*i)原创 2018-12-24 18:11:35 · 4099 阅读 · 1 评论 -
最大的位或
最大的位或问题:给定自然数l和r ,选取2个整数x,y满足l &lt;= x &lt;= y &lt;= r ,使得x|y最大,其中|是或运算。包含至多10001组测试数据。第一行有一个正整数,表示数据的组数。 接下来每一行表示一组数据,包含两个整数l,r。(保证 0 &lt;= l &lt;= r &lt;= 10^18。)做题前思路很重要!思路:1、先将较大的数转化为二进制.原创 2019-02-11 12:39:17 · 286 阅读 · 0 评论 -
约瑟夫问题No.2
约瑟夫问题No.2题目:n 个小孩围坐成一圈,并按顺时针编号为1,2,…,n,从编号为 p 的小孩顺时针依次报数,由1报到m ,当报到 m 时,该小孩从圈中出去,然后下一个再从1报数,当报到 m 时再出去。如此反复,直至所有的小孩都从圈中出去。请按出去的先后顺序输出小孩的编号。Input: 每行是用空格分开的三个整数,第一个是n,第二个是p,第三个是m (0 < m,n < 300...原创 2019-02-12 11:08:38 · 1911 阅读 · 0 评论