自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SCAU周训8-G:URAL - 1821

1.题目描述:2.题意:给n个人,以及他们跑步所需要的时间,现在比赛的规则是:按名次依次开始跑,下一位要比上一位慢30s开跑,现在问:到达终点时,第i个人暂时是第一名的人数,以及其姓名的字典序输出。3.思路:模拟。 这是一道阅读理解题,你永远可以相信标哥翻译。 我们首先先按照罚时跑——也即比赛时候的真正的比赛时间排序,然后遍历一下数组,如果他跑步所需的时间是现在最少的,那么就加入到答案当中。4.代码://G//#include<bits/stdc++.h>//#pragma

2020-07-07 22:09:52 193 1

原创 SCAU周训8-A:POJ - 1836

1.题目描述:2.题意:让你从原序列中抽出几个人,使得每个人都可以看不到左边或者右边的人。最少抽出多少个人?!3.思路:DP[LIS]。 如果要看不到人,那么必定这个队列是一个单调的序列,但是它可以选择方向,那么就是一个类似于三角形一样的序列,从中间往两边递减。要求最少的人,我们就要求一个最长的递增序列的长度,典型LIS。这题两边的思路可以直接变成从头一次,然后反过来再一次。那么组合的时候就选左边一个,右边一个,选最大的就OK了。4.代码://A#include<iostream&gt

2020-07-07 22:04:36 148

原创 SCAU周训8-C:计蒜客 - A1108

1.题目描述:2.题意:给出一个图,求所有刨去某个点的最短路径的权值和。3.思路:1)暴力。【O(n4),TLE】。直接在循环1->k里跑floyd。2)分治+floyd。 【O(n3logn),AC】。这个思路我还得学个几百年。 直接求循环肯定是T的,300也承受不来4次方的摧残啊!我们来想想,每次挖掉一个点,对图重新求一遍最短路,其实有非常多的边的信息是不变的。这个重复计算我们可以去掉!那么我们该怎么利用上之前的信息呢?!分治这个时候就给了我们一个思路,我们可以先算一部分的,然后把这一

2020-07-07 21:45:42 208

原创 SCAU周训4-G:URAL - 1204

1.题目描述:2.题意:x*x=x(mod n),给定n,求出所有小于n的x,升序输出。3.思路:1)扩展欧几里得。【待补】2)逆元+费马小定理。 我们来看一个平凡解——x=0。由于这个是看得出来的,我们就直接输出,然后看一个也是比较平凡的解——x=1。x=1是怎么来的呢?当x与n互质的时候,xx=x(mod n)->x=1(mod n) 那么在x<=n的范围内,x=1。顺着这个思路,我们想:x和n不互质呢?我们分别讨论一下:假设n=pq,则:当gcd(x,n)=p时,有:x=1(

2020-07-03 23:21:42 145

原创 SCAU周训4-F:URAL - 1057

1.题目描述:2.题意:给你一个区间[X,Y],计数区间中所有由K个不同的B的幂的和组成的数字的个数。3.思路:数位dp。 题意说白了:计数B进制下,数字由K个1其余都是0组成的数字的个数。4.代码://F#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<(b);++i)#define mem(a,b) memset(a,(b),sizeof(a))using namespace std;typed

2020-07-03 21:28:53 129

原创 AcWing 刷题计划:0x60 图论——AcWing 349. 黑暗城堡

1.题目描述:2.题意:略。3.思路:最短路径树。 这题和我周训那题类似,这不过这次是把边权改成了w,我们跑一遍迪杰斯特拉算法,然后再去找每个节点有多少个前驱可以选择。然后乘起来就搞定了。4.代码://AcWing 349. 黑暗城堡//#include<bits/stdc++.h>//#pragma GCC optimize(3,"Ofast","inline")#include<iostream>#include<string>#include

2020-06-30 17:06:49 217

原创 SCAU周训1-E:CodeForces - 1005F

1.题目描述:2.题意:给你一个图,希望你能找出有多少种方式,使得这个图从1到达任意点所需要的点数之和最小。3.思路:最短路径树。 这题考了一个比较少见的数据结构——最短路径树。 由于我们做单源最短路的时候,其实出现的是一个树状的结构,但是我们并没有去记录下这棵树,所以我们只需要寻找每个节点的前驱就ok啦。对于这题来说,我们图上的边权全都是1,所以我们可以直接进行bfs,然后先记录下所有点到1的距离,因为前驱有很多,所以我们再进行dfs找前驱,如果选这个前驱,就在边上打上‘1’的标记,否则打

2020-06-29 13:28:15 169

原创 SCAU周训3-H:URAL - 1501

1.题目描述:2.题意:给你两个01序列,希望你生成一个01序列,使得其在生成过程中,01的差值不超过1。输出可能的选择顺序【任意一个】,或者“Impossible”。3.思路:dfs+记忆化。1)暴力dfs+记忆化路线剪枝。记录下选择的左右堆以及选择的0和1的个数,碰到重复走的路之间剪枝掉。部分代码:int n,m;char a[maxn],b[maxn];int tot;int ans[maxn<<1];int dp[maxn][maxn];bool flag;

2020-06-28 00:16:01 147

原创 SCAU周训2-H:HDU - 4135

1.题目描述:2.题意:问A到B的范围内,与N互质的数字有多少个。3.思路:唯一分解定理+容斥原理。 这题我们先来看看互质的条件:gcd(a,b)==1。1)那么我们可以先把N分解,然后划去A到B范围内,N的质因数的倍数。 那么问题就转化为,求A到B范围内,N的质因数的倍数的多少(用num表示),然后最后的答案就是:B-A+1-num。2)那么我们下一个问题就是,如何求倍数的数量了。由于我们直接求A到B的数量,边界比较麻烦。所以我们转换为:1到B的以及1到A-1的数量,然后相减就好啦!3)那

2020-06-27 01:27:13 144

原创 SCAU周训2-B:HDU - 5313

1.题目描述:2.题意:给我们一个二分图,要我们增加边,使得这个二分图变成完全二分图。问我们能够最多增加多少条边。3.思路:二分图染色+dp+bitset优化。 有一说一,这题数据是真的水,我自己造的数据都能卡AC代码。1)我们首先想想如何使得二分图的边数最多:那么自然是当两边的点数都接近n/2时候,边的数目是最多的。那么我们自然是要求出两边点的数目啦,其实我们只需要其中的一边的数目就够了,因为另一边的数目我们可以直接求出来。所以我们把最大加边问题,转化为:求一边点能够多么接近n/2个点,求这

2020-06-27 00:13:45 126

原创 AcWing 刷题计划:0x40 数据结构进阶——AcWing 240. 食物链

1.题目描述:2.题意:略。3.思路:a)带权并查集。 这是一道经典的带权并查集的题了。【最近刚学,拿来练手。】 关系之间给出来了:吃,被吃,同类。那么我们只需要按关系分配权值就可以了。我们这里设定:0:同类。1:吃祖先。2:被祖先吃。 为啥这么设计呢?首先由于我们初始化的时候默认为0,自己和自己自然是同类啦,而1和2刚好是关于3互补的。设计好权值,我们就可以按照带权并查集的做法去做了。4.代码://AcWing 240. 食物链//#include<bits/stdc++.h&

2020-06-26 12:10:01 162

原创 SCAU周训1-H:POJ - 3061

1.题目描述:2.题意:给你长度为N的序列,选出一段最短的连续子序列使得其和大于等于S。3.思路:a)双指针/尺取法。 固定两个指针i和j,如果和不够S就右端点挪,足够就左端点挪。扫一遍记录下最短就OK了。//H//#include<bits/stdc++.h>//#pragma GCC optimize(3,"Ofast","inline")#include<iostream>#include<string>#include<algorith

2020-06-25 22:01:31 134

原创 SCAU周训1-B:URAL - 1003

1.题目描述:2.题意:已知一个01序列,给出若干个区间以及奇偶信息,信息代表:在[l,r]区间里,1数目的奇偶性。问在这些信息里,第一个出错的是哪一个信息,如果没有,输出所有信息数m。3.思路:带权并查集。 【老子连老司机树都想到了但是就是不会带权并查集QwQ】如果做过HDU-3038的话会发现,这两题惊人的相似。都要求与之前信息相矛盾的信息。对于带权并查集我们要先知道两个操作:找祖先以及合并集合:a)找祖先,也就是:find操作。//par[x]:x的祖先;val[x]:x与祖先之间

2020-06-25 21:53:28 149

原创 AcWing 刷题计划:0x20 搜索——AcWing 173. 矩阵距离

1.题目描述:2.题意:略。3.思路:BFS。【flood-fill问题:一个起点到其他位置的最少步数】由于这题其实就是多源最短路问题。但是我们的权值是1,所以我们就可以用BFS来做。(BFS可以看成是权值为1的dijstra算法)由于是多源最短路,这个我们可以用Johnson多源最短路的思想,建立一个虚拟源点S,源点S到矩阵‘1’的距离为0,所以我们可以直接在队列里面放入所有矩阵‘1’的点,然后用BFS扩展。4.代码://AcWing 173. 矩阵距离//#include<bits

2020-06-24 15:47:26 150

原创 AcWing 刷题计划:0x00基础算法——AcWing 108. 奇数码问题

1.题目描述:2.题意:略。3.思路:数学+思维。 【这谁会做啊!】 首先我们观察,对于一个空格它有两种操作:左右移动,上下移动。我们要确定两个矩阵是否一样,就要看在这两种操作下都不变的量,然后这个量就是我们对比的依据。一般对于这种矩阵题,都可以化成一个一维的串。如果化成串之后,我们学过的具有某些特质的数【目前为止】就只有:逆序数。我们发现:上下操作不改变逆序数的奇偶,左右操作不改变逆序数的大小。于是我们有了一个指标——序列的逆序数。逆序数奇偶性相同,则可以。否则,则不行。4.代码://A

2020-06-22 13:26:05 188

原创 AcWing 刷题计划:0x20 搜索——AcWing 171. 送礼物

1.题目描述:2.题意:略。3.思路:双向搜索(meet in the middle)。 首先先把序列分成前后两部分,然后搜前一半,存起来,再搜后一半。因为有前一半的数据,我们搜后一半的时候,就可以用w-sum的方式搜索。剪枝:a)符合性剪枝:sum>w就returnb)搜索顺序剪枝:由于有第一个,我们可以从大到小进行搜索c)无用性剪枝:当我们最终的答案已经到底w的时候,就可以直接返回了4.代码://AcWing 171. 送礼物 //#include<bits/stdc

2020-06-22 11:02:29 143

原创 AcWing 刷题计划:0x20 搜索——AcWing 170. 加成序列

1.题目描述:2.题意:略。3.思路:构造/搜索。 这题可以是一道构造题,但是我们看100的数据量,可以尝试着用搜索来解决。因为它要求最短的序列长度,所以我们采取迭代加深搜索。每次限制搜索的深度d,由于我们确定会在比较浅的层就能搜到答案,所以我们每次对深度为d的搜索树进行遍历,如果没有答案就加深一层,直到找到。剪枝:1)由于我们要求最短,那么我们其实用越大的数凑n越好,所以我们选择从大到小的方式遍历。2)由于我们可以凑出来的数会有重复,去重也能加快我们的搜索。4.代码://AcWing

2020-06-20 15:53:45 137

原创 AcWing 刷题计划:0x00基础算法——AcWing 112. 雷达设备

1.题目描述:2.题意:略。3.思路:转化+贪心。 这题最最最难的就是第一步:转化。首先,题目中的d是半径,那么如何确定这个圆心呢?这可能是很多人一开始会去想的问题。但是这道题并不需要去这样思考,由于固定圆心太麻烦,所以我们选择换到一些已知的东西上去想:岛屿所能够到达的边界是哪里? 我们发现每个岛屿它都拥有一个探测器的边界区间,那就是:l=x-sqrt(d2-y2)r=x+sqrt(d2-y2)只要探测器在这个区间之内,小岛就可以被探测到!我们并不需要用探测器去确定所需要探测的岛,而是由岛确

2020-06-20 11:44:18 183

原创 AcWing 刷题计划:0x00基础算法——AcWing 122. 糖果传递

1.题目描述:2.题意:略。3.思路:思维+贪心。 【这谁能想得到.jpg】 首先,我们对于似乎一开始是毫无头绪的。1)但是我们发现,如果传糖果,那必然是向左右最多各传递一下,不然的话不符合最少的原则,那么我们可以先设定传的值是多少:Xi——第i个人传递给第i+1个人的糖果数,Xi>0则失去,Xi<0则得到。那么ans=|X1|+|X2|+…+|Xn|。2)但是现在我们还是没有什么很好的解决这个式子的办法,转而我们来构建已知与未知的联系:有了Xi的表示之后,我们就可以得到一系列等

2020-06-19 12:27:38 202

原创 AcWing 刷题计划:0x20 搜索——AcWing 165. 小猫爬山

1.题目描述:2.题意:略。3.思路:深搜。 深搜很重要的是搜索的顺序以及决策的方式。1)枚举猫。直接枚举猫在哪辆车里面,结果是T飞了。【不过我不知道为啥,可能的一个原因是,直接枚举猫不好剪枝,会超时。】部分代码:void dfs(int cnt){ if(cnt==n){ans=min(tmp+1,ans);return;} if(tmp>=ans) return; rep(i,0,n) { if(vis[i]) continue; vis[i]=true; i

2020-06-19 09:09:18 139

原创 AcWing 刷题计划:0x00基础算法——AcWing 123. 士兵

1.题目描述:2.题意:略。3.思路:思维+中位数。 思维题杀我QwQ。 由于我们可以往四个方向走,所以我们直接拆分成x坐标和y坐标来看就ok了!1)对于y坐标:我们观察一下它的要求,从一点出发到达所需点的代价最小。这不就是中位数就ok了吗!所以y坐标就求每个y坐标到y坐标中位数的代价和就ok了!!2)对于x坐标:x坐标比较麻烦,但是我们还是有办法可以找到规律的,由于我们要排成以某个x坐标为起点的一字长阵。所以我们只要确定了起点a,那么剩下的路径就没问题啦。 (这里其实可以尝试枚举a的坐标,

2020-06-18 13:33:14 119

原创 AcWing 刷题计划:0x10 基本数据结构——AcWing 146. 序列

1.题目描述:2.题意:略。3.思路:堆+多路归并。 (orz,思路真的厉害。)一开始,如果我们暴力做的话,时间复杂度先不说,空间就莫得了。对于这种m个的,我们其实可以发现,它可以拆分成两个两个一组的形式去做,也即:我先用两组进行题目要求的操作,然后得到了一个新数组,再用新数组去和第三个数组继续操作。【有分治那味儿了2333】(为什么可以这样操作呢?因为我们是每一组只能选一个,那么对于两组的并来说,我们只需要前n个,那么这前n个必定是两组的和的形式,那么再去和第三组做加法,结果取最小的前n个,如

2020-06-18 11:22:06 135

原创 原创 AcWing 刷题计划:0x10 基本数据结构——AcWing 141. 周期

1.题目描述:2.题意:略。3.思路:KMP求最小循环节。 我们先求出字符串的next数组。假设当前字符串的下标为i,则i-next[i]就有可能是一个循环节,而且是最小的,为什么说有可能呢,因为后面的字符串有可能不是一个完整的循环节。所以我们要判断一下。而为什么是最小循环节呢。因为next数组的意义是最大公共前后缀的长度,用总长去减去这个长度就是一个最小循环节啦~【可以想象一下,一个对称的字符串然后向前找前一个next数组,减去找到的那部分就必定是重复的最小循环节】。我们大致分一下情况:1)是

2020-06-17 14:39:12 195

原创 AcWing 刷题计划:0x10 基本数据结构—— AcWing 133. 蚯蚓

1.题目描述:2.题意:略。3.思路:1)纯模拟。 用优先队列模拟,T飞~。部分代码:typedef vector<ll> VLL;ll n,m,q,u,v,t;priority_queue<ll> Q;li void solve(){ m=read(),q=read(),u=read(),v=read(),t=read(); while(n--) Q.push(read()); rep(i,1,m+1) { ll tmp=Q.top();Q.p

2020-06-17 14:14:11 163

原创 AcWing 刷题计划:0x10 基本数据结构—— AcWing 136. 邻值查找

1.题目描述:2.题意:略。3.思路:1)纯暴力。 双重循环,T飞警告!部分代码:int n,m;int a[maxn];li void solve(){ a[0]=read(); rep(i,1,n) { a[i]=read(); int ind=0,minv=abs(a[i]-a[0]),mina=a[0]; rep(j,1,i) { int tmp=abs(a[j]-a[i]); if(tmp<minv) { minv=tmp;

2020-06-16 22:08:38 154 1

原创 AcWing 刷题计划:0x10 基本数据结构—— AcWing 135. 最大子序和

1.题目描述:2.题意:略。3.思路:单调队列+前缀和。 (看标签做题系列 TTwTT)这道题目乍一看以为要dp,但是认真看题,发现他要求长度在m以内,这种在某个长度以内或者某个长度以外的,一般都是单调队列。 我们维护一个递增的单调队列,维护前缀和。 为啥维护递增的前缀和队列呢?由于我们要求一段连续区间的最大和,那么我们维护前缀和的最小值,对于某些区间,我们可以直接减去最小值,就是符合条件的区间和了呀!又由于是最小值,得到的值必定是最大值。算法思路:1)我们预处理出所有的前缀和。2)对于1-

2020-06-16 10:03:00 222

原创 AcWing 刷题计划:0x10 基本数据结构—— AcWing 149. 荷马史诗

1.题目描述:2.题意:略。3.思路:贪心。【K叉哈夫曼树】 看哈夫曼树的定义就知道是哈夫曼编码,而所谓k进制就是k叉哈夫曼树的意思。那么如何去构建一个哈夫曼树呢,先队列放入所有的数,选取最小的k个数,合并成一个节点,然后放回队列,直到剩下只有一个,这样最少使用次数的就会在树的靠下端,这样可以使得带权路径长度最短。 不过要考虑一点问题,就是对于最靠近根的那一层,如果不满足k个结点,那么我把下面层任意一个提到靠近根的那层可以降低带权路径长度,所以我们加入空结点,凑成刚好满的k叉树。由于我们询问的是

2020-06-15 19:54:27 141

原创 AcWing 刷题计划:0x10 基本数据结构—— AcWing 138. 兔子与兔子

1.题目描述:2.题意:略。3.思路:1)暴力。 用stl的string.substr方法和‘==’判断,T飞~,如果加一点剪枝放到unordered_set依旧会T。大概是substr方法的复杂度比较高吧。代码://显示主要的函数int m,l,r;string s,tmp1,tmp2;li void solve(){ m=read(); while(m--) { l=read(),r=read(); l--; tmp1=s.substr(l,r-l); l=r

2020-06-15 12:34:55 190

原创 Codeforces Round 刷题计划 #649 (Div. 2)

题目A1.题目描述:2.题意:找出最长的一段序列,使得序列的和不被x整除。3.思路:思维。 如果数皆为x的倍数,那么直接输出-1;如果全部数加起来取模x不等于0,那么输出n;否则,考虑去掉前面第一个模x非零的数的下标和n-最后一个模x非零的数的下标的最小值。【假设模x后序列是:0001000020000300004000500,如果加起来模x为0,那么显然把5去掉就最长】4.代码://A//#include<bits/stdc++.h>//#pragma GCC optim

2020-06-14 02:18:44 198

原创 AcWing 刷题计划:0x10 基本数据结构——AcWing 143. 最大异或对

1.题目描述:2.题意:略。3.思路:1)【骗分】暴力。 直接枚举每个数和另外一个数字异或的值,然后维护最大值。O(n2)直接T飞抬走。当然我们可以观察一下,最大的异或值必定有一个数字在位数最长的中选,所以我们可以加个剪枝。笔者试了,也是T。(TTwTT)2)【正解】Trie树+贪心。 如何想到Trie优化的呢,我们思考异或的本质是什么,就是对应二进制的不同的数字。那么我们可以用二进制的表示建一颗 0-1Trie。模拟异或的过程,对于所有的数字,我们先建一颗Trie,然后枚举每个数字,从根开始走

2020-06-13 17:26:01 133

原创 AcWing 刷题计划:0x10 基本数据结构——AcWing 154. 滑动窗口

1.题目描述:2.题意:略。3.思路:单调队列。 经典的单调队列题目了——维护一段定长区间的最值。我们可以创建两个单调队列min_q,max_q。以维护最小值为例子:如果当前值比min_q的尾端要小,我们就把它放到适合的位置(即不断的pop),然后把它的编号放入队列。当对首编号与当前编号相差大于k时,我们就pop掉队首元素。由于队列内单调递增,所以区间内最小值即为队首元素。4.代码://AcWing 154. 滑动窗口//#include<bits/stdc++.h>//#p

2020-06-13 11:29:27 141

原创 AcWing 刷题计划:0x10 基本数据结构——AcWing 142. 前缀统计

1.题目描述:2.题意:略.3.思路:Trie树。 这个应该是比较板子的一道题目了,在建树的过程中把exist数组变成数量,然后在查找的时候维护数量就ok了。4.代码://AcWing 142. 前缀统计//#include<bits/stdc++.h>//#pragma GCC optimize(3,"Ofast","inline")#include<iostream>#include<string>#include<algorithm&g

2020-06-12 10:25:05 141

原创 AcWing 刷题计划:0x10 基本数据结构——AcWing 148. 合并果子

1.题目描述:2.题意:略。3.思路:贪心。 每次选择最小的两堆进行合并。由于每次都是两个堆的数量的加和。所以我们如果把两个大的数在

2020-06-12 10:11:09 110

原创 AcWing 刷题计划:0x10 基本数据结构——AcWing 150. 括号画家

1.题目描述:2.题意:略。3.思路:模拟。 题目要求最长的匹配括号长度。对于左括号,我们放入栈内,对于右括号,如果可以匹配,则删除,不可以匹配,则放入栈内。(放入栈内就代表前面不可能再匹配了。)注意,我们这里用一个技巧,记录的是下标而不是字母,因为这样相当于是记录下了括号的坐标,对于长度我们可以直接计算得到。我们如此加入与删除之后,我们所删除的序列就是匹配的序列。那么对于此我们只需要去维护最大值即可。4.代码://AcWing 150. 括号画家//#include<bits/std

2020-06-11 14:24:52 170 1

原创 AcWing 刷题计划:0x00基础算法——AcWing 125. 耍杂技的牛

1.题目描述:2.题意:略。3.思路:贪心。 这题的证明比较麻烦(其实我是拍脑袋想出来的。)就不证了。简单说一下思路。看到每个数都有两个属性,属性之间相互影响。假设有了一个已经排好序的序列,那么下一个的最大可能性是:上一个最大可能性+上一个的体重和能力减去当前的能力。 那么我们可以从这里得到什么启示呢?当这两者加和越大,我后面选它能够获得的利益就越大,比如当前牛的体重越大,那么它作为最后一头牛我的风险就越小,同理,我的能力越大,他放到越后面风险越小。所以我们只需要按照风险+能力值排序,维护最大值

2020-06-10 10:52:40 135

原创 AcWing 刷题计划:0x00基础算法——AcWing 127. 任务

1.题目描述:2.题意:略。3.思路:贪心。【带点权的二分图匹配问题】 看题目的范围:0<x<1440,0<=y<=100。我们发现价值w几乎被x决定好了,所以我们可以贪心地来做。首先对x排序,然后我们从大到小依次选取机器,那么如何让机器的数目尽可能多呢?(如y总所言,这是个二分图匹配问题)我们只需要把刚好满足的机器先给这个任务就好了,以后条件更少的任务就可以有更好的机器进行匹配。那么我们的问题就变成了,选择一个大于等于某个值的值,所以我们可以用lower_bound来解

2020-06-09 13:27:37 120

原创 AcWing 刷题计划:0x00基础算法——AcWing 118. 分形

1.题目描述:2.题意:略。3.思路:递归模拟+坐标变换。 我们用一个二维数组模拟整个平面,然后通过递归的方式填出整个二维平面就好啦。因为最大是7,所以我们可以预处理出7个的平面,询问只需要输出对应的左上角的图形就行了。坐标变换注意一下我们的原点是在左上角的就ok了。4.代码://AcWing 118. 分形 //#include<bits/stdc++.h>//#pragma GCC optimize(3,"Ofast","inline")#include<iost

2020-06-04 14:19:47 152

原创 AcWing 刷题计划:0x00基础算法——AcWing 117. 占卜DIY

1.题目描述:2.题意:略。3.思路:模拟。 双端队列模拟放卡和收卡,注意的地方就是,只要有4个朝上就可以,以及一定是碰到4个K的时候才退出,即使生命值为空。4.代码://AcWing 117. 占卜DIY//#include<bits/stdc++.h>//#pragma GCC optimize(3,"Ofast","inline")#include<iostream>#include<string>#include<algorithm

2020-06-03 15:42:22 155

原创 AcWing 刷题计划:0x00基础算法——AcWing 113. 特殊排序

1.题目描述:2.题意:给你一个cmp函数,你可以进行不超过10000次的调用,然后输出所需要的序列,这个序列满足左边的值小于右边的值,但是并不具有传递性,就是a<b,b<c,a≮ c,所以答案不唯一。3.思路:二分+插入排序。 对于一个排序好的数列,如果来了一个数k,我们就是要找到 t 和 l 使得 t<k<l,因为有序,我们对于t<k 那么t的右边一定存在 l 使得k<l 。那么我们就二分找到这样的位置,然后通过插入排序到达就行了。4.代码:// For

2020-06-03 11:18:48 223

原创 AcWing 刷题计划:0x00基础算法——AcWing 116. 飞行员兄弟

1.题目描述:2.题意:略3.思路:枚举。 这题的矩阵为4*4的固定矩阵,而且所给操作并不符合无后效性,无法用递推的方式优化,所以只能枚举216 种状态了。但是这个数量级在106 左右,可以暴力的。我们的思路是用一位数字代表一个空格,所以一个int就能存下原本的矩阵,然后我们进行一个操作也可以通过异或一个值来操作(因为1异或一个数就是取反,0异或一个数是数本身)。而这个异或值也是一个int值,我们可以先预处理出来(其实也可以直接手算或者bitset打表,本人懒。)那么我们循环(0~216-1)每次查

2020-06-02 10:40:42 148

空空如也

空空如也

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

TA关注的人

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