其它
月光下的魔术师
这个作者很懒,什么都没留下…
展开
-
CCF认证技巧
尽量用string,因为不知道有多少的空格getline:使用前用getchar缓冲掉换行,getline直接处理掉最后的换行#include <bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; getchar(); for(int i=0;i<n;i++){ stri...原创 2020-06-24 20:06:48 · 952 阅读 · 0 评论 -
单调栈的应用
直方图求最大矩阵POJ2559最大全1子矩阵POJ3494原创 2020-06-24 20:00:56 · 259 阅读 · 0 评论 -
尺取法题集合
Poj3061题意:最短的子串满足和≥s代码#include <bits/stdc++.h>using namespace std;int const N = 1e5 + 10;int a[N],n,s;int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d%...原创 2020-05-08 14:21:17 · 303 阅读 · 0 评论 -
CCF:201412-3集合竞价
题解:思路还是很简单的,就是暴力模拟。 注意如果cancel的行还是cancel,那么上一个cancel的记录不用管,不用想太复杂。出题人没解释清楚。 详细处理见代码。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int>pii;...原创 2019-03-11 17:13:55 · 205 阅读 · 0 评论 -
PTA:L3-004 肿瘤诊断
PTA:L3-004肿瘤诊断题解:三维BFS。注意坐标的建立。代码:#include <bits/stdc++.h>using namespace std;int const N = 200 + 10;int n,m,h,t;int w[N][N][N],vis[N][N][N];int dir[6][3] ={{0,0,1},{0,0,-1},{0,1,0}...原创 2019-03-10 11:08:31 · 565 阅读 · 0 评论 -
HDU6341:DFS+剪枝
HDU6341题解:参考了大佬的代码。其实还是比较好理解。矩阵的旋转操作,自己摸索,还是比较好想。 剪枝:每次搜索到一个块,判断和前面的块是否冲突。代码:#include <bits/stdc++.h>using namespace std;int const N = 20;char c;int mp[N][N],ans;bool vis[N];void ...原创 2019-02-17 19:00:05 · 164 阅读 · 0 评论 -
uva1602:回溯+判重
题解:这一题思路很清晰,就是回溯+判重。但是难点在于判重。旋转、平移、翻转该怎么统一呢?参考了大佬的代码,终于豁然开朗。首先判重想到set,这里要用的双set,代码里有说明。 旋转操作,每次旋转90度,就是(x,y)-->(y,-x) 平移操作,找出整个图形的x和y坐标的最小值,然后每个图形相应的平移。 翻转,就是(x,y)-->(y,x),但是翻转完之后,还有经过旋转判重。...原创 2019-02-17 18:54:28 · 221 阅读 · 0 评论 -
UVA1343:IDA*
题解:这一题用IDA*算法。首先要打表,把每个格子从上到,下从左到右依次编号。然后每个方向也依次编号,我用block数组。然后中间的一圈也编号,用于最后判断是否一致。重点在于估值函数h()的写法。我们发现每次移动也给方向,数字最多改变一个,所以如果(目前步数+要改变的最小的次数)> 最大的步数,那么剪枝。代码:#include <bits/stdc++.h>using...原创 2019-02-17 18:45:27 · 118 阅读 · 0 评论 -
UVA1601:单向BFS
题解:这一题收获很大,参考了刘汝佳的代码。很多细节处理的都很不错。我用的是单向BFS。注释在代码里。花一点时间细心的看,还是能看懂的。代码:#include <bits/stdc++.h>#define ft first#define sd secondusing namespace std;typedef pair<int,int>pii;int co...原创 2019-02-17 18:36:23 · 193 阅读 · 0 评论 -
hihocoder 1322:DFS
hihocoder 1322判断是否构成树题解:DFS简单粗暴#include <bits/stdc++.h>using namespace std;int const N = 500 + 10;int n,m;vector<int>G[N];bool vis[N];void DFS(int u){ vis[u] = true; for(int...原创 2019-02-10 12:52:30 · 187 阅读 · 0 评论 -
十进制快速幂模板
ll qpow(ll a,ll n){ ll ans = 1; while(n){ if(n & 1) ans = ans * a % mod; a = a * a % mod; n >>= 1; } return ans;}ll qpow_decimal(ll a,char s[N]){ //求解a^s,把幂依次变成a^1,a^10,a^100,...原创 2019-10-09 22:16:24 · 101 阅读 · 0 评论 -
分段打表模板
HDU4389打表模板#include <bits/stdc++.h>using namespace std;int const step = 1e6;int const N = 1e3 + 10;int const M = 1e9;int sum[N];int fun(int n){ if(n == 0) return 0; else return fun(...原创 2019-10-09 22:16:43 · 244 阅读 · 0 评论 -
HDU6444:数论+最大字段和
HDU6444题解环的大小为n,每次跳k步,所有有gcd(n,k)个不同的环,每个环的大小为len =n / gcd(n,k)。接下来对每一个环进行分析。 先对环的权值求和sum。 如果sum ≤0,那么找长度不大于len的最大连续字段和。 如果sum >0,num = m / len表示完整的圈的个数,b = m % len表示剩下的步数。有两种方案。 一种是先跑完num...原创 2019-03-27 12:30:48 · 230 阅读 · 0 评论 -
CF1100E:二分+拓扑排序
CF1100E题意:n个点,m条边的有向图,改变边的方向使之没有环,且改变的边的权值最大值最小。输出最小权值和边的数量输出边的编号(边的编号为输入顺序)。如果有很多,输入任意。题解:显然二分枚举权值最大的边。把大于这个权值的边进行拓扑排序。因为小≤这个权值的边可以任意改变方向,所以看成无环。然而大于这个权值的边不能改变,所以拓扑排序如果存在环,那么就false了。最后该改变哪些...原创 2019-02-26 13:06:40 · 194 阅读 · 0 评论 -
二分模板+习题
整数二分模板while (left <= right){ int mid = (left + right) / 2; if(check(mid)){ ans=mid; left = mid + 1; } else right = mid - 1;}double二分模板for(int i=0; i<100; i++)...原创 2019-02-26 18:41:24 · 323 阅读 · 0 评论 -
CF898D:贪心
CF898D这是一道很好的题目,我思考了很久,终于搞透了。思维很好,代码很简洁。题意:有n个闹钟,会在指定的时间内响。 此人会在连续m个时间内,至少有k个时钟响时醒来。 关掉最少的闹钟,使此人能够睡一个好觉。题解:容器:排序+双端队列。 贪心:如果满足醒来的条件,每次优先关掉的是后面的闹钟,因为后面的会影响更后面的。 每次控制闹钟的个数为k个。举个栗子,k = 2,如果队...原创 2019-02-28 10:55:45 · 226 阅读 · 0 评论 -
CF884C:贪心
CF884C:题解:给你一张有向图,修改两条边,使相互到达的点数量最多。题解:p的值都不相同,说明图中只存在环或者点。 找出最大的两个环,可以通过修改两条边进行合并。 每个环的对数为cnt*cnt 利用并查集进行维护。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;i...原创 2019-02-27 22:34:35 · 169 阅读 · 0 评论 -
CF853B:暴力+贪心
CF853B:题意:有n+1个城市,m个航班,n个城市的人到0城市开k天会,最后再回去。一天只有一趟航班。请问乘坐航班的最小费用。题解:如果乘坐价格便宜的航班,可能导致没有回来的航班。所以不能以价格排序。 如果乘坐早一点的航班,能准时到达,但是价格不是最优的。正确解答:枚举待在城市的k天,[l,l+k-1],求最小花费。 预处理第第i天前过去的最小花费,和第i天后回去的最小...原创 2019-02-27 22:29:11 · 212 阅读 · 0 评论 -
CF925B:贪心+二分
CF925B题意:给出n个服务器的资源数,运行两个程序需要资源数为s1,s2 选择k1个服务器,使资源数总和不小于s1,且每个服务器的资源数不小于s1/k1 选择k2个服务器,使资源数总和不小于s2,且每个服务器的资源数不小于s2/k2 选取的服务器不能有交叉题解:贪心的思想,按服务器的资源数对服务器进行排序。 然后枚举k1,找到满足资源数≥s1/k1的服务器的起始位置p,p...原创 2019-02-26 17:39:22 · 216 阅读 · 0 评论 -
希尔伯特曲线
2019牛客暑期多校训练营(第十场)题解:实质上是给出点,转换为点的编号。然后对编号排序,从小到大输出点。对于等级n,边长为2^n,有2^2n个点。我们可以给点编号。这里有一个巧妙的方法,对于等级n,可以分治成n-1,以此类推。对于等级n,可以取2^(2n-2)为系数,就如代码中的v。比如等级3有64个点。那么等级3有系数16k3,k3∈[0,3]。等级2有4k2,k2∈[0,3],等级1...原创 2019-08-25 09:43:37 · 1003 阅读 · 0 评论 -
Equilateral Triangles:Gym - 101845E
Gym - 101845E题解把等边三角形旋转变成直角三角形。枚举任意两个点,求坐标差的gcd,如果大于1,则结果加1。把左边从左到右,从下到上依次放入vector。然后O(n^2)枚举。代码#include <bits/stdc++.h>using namespace std;typedef pair<int,int>pii;vector&...原创 2019-05-20 11:29:02 · 426 阅读 · 0 评论 -
模拟退火:POJ2420
POJ2420题解:神奇的模拟退火算法,第一次接触,记录一下。找到局部最优解之后,继续改变坐标,找更优的,一不小心就找到了全局最优。 随机化算法我也很迷~。代码#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include ...原创 2019-04-07 21:32:19 · 186 阅读 · 0 评论 -
CF1039B:交互题+二分
CF1039B题解: 第二次做交互题,对交互题没什么感觉。你要询问系统,所以你cout输入,系统再立刻给你cin答案。交互题格式就在于要清空缓存区,可以在printf输出完之后,加一fflush(stdout);也可以直接使用cout<<endl来输出,endl不仅是换行,还可以直接清空缓存区。 二分询问区间,当火车在[1,n]区间,你询问[l-k,mid+k],因...原创 2019-02-26 13:56:10 · 950 阅读 · 0 评论 -
CF1019B:交互题+二分
CF1019B题解:任意两个人之间相差一个数字,手写模拟一下,可以发现规律。就是相对的两个人之间差值为-2,0,2。 如果n = 4k+2,一定无解。因为它和对面的数字相差2k+1奇数个,根据奇偶相加规律。相对的一定是奇偶性不同。注意题目中说了n只能为偶数,所以n = 4k+1 or 4k+3不用考虑了。 接下来就二分查找相同的数字。两个异号区间之间必定存在0 代码:#i...原创 2019-02-26 15:40:00 · 539 阅读 · 0 评论 -
CF376D:差分
CF376D题解因为n组数据是要按字典序排列。所以我们只需考虑上下相邻的两组是否满足条件,总共有n-1对。 每一对都有一个变化的区间,最后我们求出n-1对的变化区间。变化区间自己写写就能找到规律。最后判断是否存在一个区间,使所有的对都在里面。 我们可以根据括号匹配的思想,相当于差分的思想。如果[x1,y1]满足条件,那么c[x1]++,c[y1+1]--。最后我们求前缀和为n-1那么就...原创 2019-04-10 08:10:19 · 106 阅读 · 0 评论