自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 AcWing 3711. 方格涂色 二进制枚举 模拟

题目题解思路首先想到了肯定是4个顶点,对四条边的影响,我们可以对每条边分别进行特判,当他大于n-2的时候就必须涂顶点,为了减少影响,我们肯定让他涂在要涂的地方多的位置,最后在判断值是否合法就可以,不过模拟的比较麻烦。闫总用的是二进制枚举来枚举枚举4个顶点涂和不涂的情况,对每个情况,进行判断,只要有一个满足即可。AC代码#include <iostream>#include <algorithm>#include <cstdio>using namesp

2021-06-30 18:05:39 113

原创 AcWing 3705. 子集mex值 哈希表 贪心 选好贪心策略

题目题解思路因为题目的数据量比较少,直接哈希每个数出现的个数。从0遍历出现的次数,当出现的个数为1时,每次分给其中一个(挑一个存大的),然后将小的标记不向前了,(因为次数缺少了数,两个集合总有一个只能mex这个值)。为0时,遍历中断,为最大的mex值。两个相加即可!AC代码#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using names

2021-06-30 17:36:28 97

原创 AcWing 3697. 回文子序列 子序列 哈希表

题目链接题解思路首先要明白子序列的意思,就是可以在总序列总选择几个合在一起,并不一定是连续的。这样我们只要找到两个相等的数之间的距离大于1即可,这样就能组成为3的回文子序列。如果暴力的话要n平方的时间复杂度,运用哈希表存入每个元素的第一次出现的地址,出现重复时对比即可。可以用map。AC代码#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>

2021-06-30 16:25:17 68

原创 ACwing 3686. 移动序列 区间移动 双指针

题目链接题解思路我的想法是用两个连续1区间的首减去尾,这样的话,代码实现就比较麻烦了。闫总直接取一个指针,来更新答案,这样相邻的求出来是0,就可以不用考虑用两个了。妙啊! if ( re != -1 ) ans += i - re -1; re = i;AC代码#include <cstdio>#include <iostream>#include <a

2021-06-30 15:52:44 110

原创 ACwing 3679. 素数矩阵 构造矩阵 找两个数然后0即可 思维

题目题解思路看到样例那么复杂想了好久,一直往搜索的方向想,偏了。只要随便找两个合数加起来是素数,然后没行每列都出现就行了!思维AC代码#include <iostream>#include <cstdio>#include <algorithm>using namespace std;int main (){ int t; cin>>t; while(t--) { int n ;

2021-06-29 15:44:22 67

原创 ACwing 3664. 数组补全 在线转离线 贪心

题目链接题解思路一开始我的想法是将每一步的中位数求出,一步一步的加数,在线处理,中位数大于y就加1,小于y就加y,这是基本的贪心,但是这样做复杂度貌似挺高的。闫总将数分为大于y和小于y的部分,大于y的部分一定大于等于n/2+1,小于y部分一定小于等于n/2,n为奇数。当断出的数组大于数y的数没超过n/2+1,就让他只加到n/2+1,这样可以保证答案最小,超过n/2+1时取大,这时在中位数的左边还有大于等于y的数,小于y的数就要变少了。当变少的数比 断出的数组 小于数y的数 少时 , 说明数组无

2021-06-29 11:13:05 64

原创 AcWing 3672. 数组重排 构造函数 暑假集训开始!

题目题目题解思路根据题目意思可以构造 j-aj > i - ai来阻止他们相等,也就是要让新函数单调递增,给a数组添符号然后从小到大排序,相当于让两个递增函数相加,还是递增的!AC代码#include <iostream>#include <cstdio>#include <algorithm>using namespace std;int a[200];int main (){ int t; cin>>t;

2021-06-29 09:45:58 67

原创 ACwing3481. 阶乘的和 二进制枚举 也可以DFS

题目数N能否由某些数的阶乘的合组成题解思路很自然的先把每个数的阶乘放到数组里,因为1e6不超过10的阶乘,所以只需取到10的阶乘就行。这样我们也可以用DFS解决,对每个数的阶乘选择取还是不去,及时剪枝,也能AC。我们玩点新花样,同样和上一篇博客一样用二进制来枚举这个过程。对阶乘进行0到2的9次方的枚举,对每个0代表不选择1代表选择,将答案全放进set里,如果N在集合里存在就是对的。AC代码#include <iostream>#include <cstdio>#

2021-06-10 22:03:06 102

原创 ACwing3646. 分水果 二进制枚举

题目题解思路最多能有7种方案,所以我们枚举为2的7次方,对每种方案进行选择和不选择的判断,二进制的0和1恰好能这样符合枚举,枚举时更新答案。AC代码#include <iostream>#include <cstdio>using namespace std;int s[7][3] = { {0, 0, 1}, {0, 1, 0}, {0, 1, 1}, {1, 0, 0}, {1, 0, 1}, {1, 1, 0},

2021-06-08 21:56:39 77

原创 ACwing3636. 数组延伸 闫总巧妙的思维

题目题解思路一开始还想用队列来模拟,结果TLE,因为数组能延申的超长,例如取最大1e9和1e9 这样前面每一个数都能延申出一个1 , 究极长了。仔细观察会发现一个性质,每个数延申出来的数之和就是原来的数,不管他延申多少个数,他们之和都是原来的数。这样我们只要求出每个数能延申的次数,然后取最小的就可以知道整个数组最多能延申多少次,这样答案就是原本的数乘能延申的次数+1(加上本身)+ 断点前的和。妙啊!!!AC代码#include <iostream>#include <cs

2021-06-07 22:08:13 120 5

原创 ACwing 3624. 三值字符串 双指针 当时没写出来

题目链接题解思路闫总用了这一步属实想不到,让右指针保证了每一个数的必要性,再让左指针将字符串读完。当存在新答案时更新。右指针的这个操作没想到。 while( vis[a[j] - '0'] > 1) { vis[a[j]-'0']--; j++; }AC代码#include <iostream>#include <cstdio&g

2021-06-07 19:55:11 50

原创 CodeForces - 961B 双指针 看清数据范围 注意变量 WA了N次

题目题解思路用双指针维护大小为k的区间即可,暴力往回走直接TLE。100000个 10000时爆int答案数据范围大于int 用long long 。很简单的双指针,写错那么多次,都是自己太急,写了不少错误,没认真考虑。AC代码#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <cmath>#include &lt

2021-06-04 09:18:41 134 1

原创 ACwing每日一题 3617. 子矩形计数 差分 + 思维 线性复杂度

题目链接题解思路一开始只想着暴力做,用滑动矩形去框区域,时间复杂度甚至大于n平方,肯定会超时,另外还没想出处理其他形状的矩形的方法,就看闫总视频解析去了。直接从符合条件的区域出发来拼接矩形,这就是大佬的思维!然后对能组合成目标矩形的长宽进行枚举,选择一遍,判断另外一边是否合法,然后让对应的长宽的数量相乘累加。这样的话我们要分别对A B 处理存储有N个连续1的个数的数组。如果暴力的话复杂度为 N方 ,这里就用到了差分!当存在一段区间为1时,我们要对这一段的区间都自增,差分就可以更好的处理这

2021-06-03 17:46:44 82

原创 Aizu - 0121 BFS 反向BFS 利用map进行类似hash的状态压缩 string操作小妙招

题目题解思路这题类似八数码,都是转换回一个状态,而且状态受到多影响,不能单纯的BFS操作,于是有了类似打表的方法,反向BFS。用终点推出能到达的每一个位置,并存起来,这下就是整个图的状态对应数值的情况了,八数码用的康托展开hash出了图的每一个情况对应的数值,这题数据量小,我们直接用map进行hash。将图一维化变成字符串。利用从没到过的新状态map值等于0来存入数值。没用过 不太敢用 的小妙招 int pit = s.find('0'); //直接返回第一个0的位置 string

2021-06-02 21:24:45 101 2

原创 POJ - 3009 DFS 回溯 部分点会重复走 不标记

题目题解思路因为石头击中砖块后,砖块会消失,破坏了地形,所以我们需要回溯处理。又因为石头能走的路径受到旁边砖块的影响,所以我们不需要标记(也可以标记在次数内),因为题目有行走的次数限制,而且不多,所以我们只需要剪枝,不需要标记。此题给我的感觉和那题推箱子有点类似,人的位置会影响箱子能推的位置,所以,给箱子能多走一部分重复的路的权限。AC代码#include <iostream>#include <cstring>#include <cstdio>usi

2021-06-02 19:41:30 94

原创 POJ - 2386 DFS染色法 模板题

题目题解思路对每个目标位置,枚举8个方向。进行染色处理,遍历全图,未染色的进行DFS操作染色。AC代码#include <iostream>#include <queue>#include <cstdio>using namespace std;int dx[8] = {-1,1,0,0,-1,-1,1,1};int dy[8] = {0,0,-1,1,-1,1,1,-1};int n,m,ans = 0;bool vis[120][120];

2021-06-01 19:29:20 89

原创 POJ - 1852 思维题 开始刷白书 《挑战程序设计》 GOGOGO

题目题解思路不能被蚂蚁会掉头误导了,掉头其实可以理解为两方还是往那边走,仔细想想是不是就相当于换了个人还是往那边走!因为是同时出发,所以消耗的时间也是一样的!所以就相当于没有区别的!这样只需对每个位置的点求一下到两边的时间,每次更新答案即可! int m,n,mans = 0 ,ans = 0; cin>>m>>n; for (int i = 1 ;i <= n ; i++ ) {

2021-06-01 18:24:16 115

原创 POJ - 2349 最小生成树 部分免费点 注意减的边数

题目题解思路很容易想到贪心的让最长的边对应的点变成免费点,用克鲁斯卡尔应该挺快的将边排序,然后让最小生成树的边加到 N - 免费点 取最后一条边的长度就行。为什么不是 N - 免费点 - 1 呢 ?因为F个免费点只能形成F-1条边,而生成树需要N-1条边。将最后的边判定公式进行代换就可以得出。AC代码#include <iostream>#include <cstdio>#include <algorithm>#include <cmath&

2021-06-01 17:04:34 86

空空如也

空空如也

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

TA关注的人

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