随笔分类 -  NowCode Introduction to algorithms

牛客算法竞赛入门题
摘要:题目链接:幸运数字Ⅱ 打表: #include<bits/stdc++.h> using namespace std; typedef long long ll; ll l,r,j,ans,pos; ll k[10005],g; void dfs(ll x) { if(x>4444444444) r 阅读全文
posted @ 2020-06-27 14:46 chstor 阅读(147) 评论(0) 推荐(0)
摘要:题目链接:走出迷宫 DFS解法: #include<bits/stdc++.h> using namespace std; const int maxn=510; int n,m,s1,s2,t1,t2; char mp[maxn][maxn]; int vis[maxn][maxn]; int d 阅读全文
posted @ 2020-06-27 11:21 chstor 阅读(236) 评论(0) 推荐(0)
摘要:搜索 • 通过不停的试探去寻找解的一种算法。 • 与其说是一种算法,不如说是一种方法。 • 基础的方法有暴力的搜索法,深搜,广搜三种。 • 更高级的有IDDFS,DBFS,A*,IDA*等等 深度优先搜索(dfs) “一条道走到黑”“走不了了再倒回去” 算法过程: VOID DFS(状态 A) 1. 阅读全文
posted @ 2020-06-27 11:17 chstor 阅读(133) 评论(0) 推荐(0)
摘要:老子的全排列呢 #include<bits/stdc++.h> using namespace std; int orders[10];//8个位置 int chosen[10];//标记 void dfs(int x){ if(x>=9){//如果超过8 for(int i=1;i<=8;i++) 阅读全文
posted @ 2020-06-27 11:09 chstor 阅读(300) 评论(1) 推荐(0)
摘要:逆序数 转载这位大佬的解释 算法讲解 既然我们已经归并排序怎么归的了,那我们就要知道他怎么求逆序数了。 首先我们要知道归并是利用了什么求出来的逆序数:在二路归并的时候,如果序列后面的数跑到前面来了,中间路过了多少个数,他前面就有多少个数比他- 大。 这不就正好是,计算前面有多少个数比他大的过程吗嘿嘿 阅读全文
posted @ 2020-06-22 17:24 chstor 阅读(152) 评论(0) 推荐(0)
摘要:分治 当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分 阅读全文
posted @ 2020-06-22 17:17 chstor 阅读(196) 评论(0) 推荐(1)
摘要:[HNOI2003]激光炸弹 二维前缀和问题 每一个点用格子代替 求(0,0)到(i,j)之间的前缀和 :f[i][j]+=f[i-1][j]+f[i][j-1]-f[i-1][j-1]; 计算每一个格子的价值:ans=max(ans,f[i][j]-f[i-R][j]-f[i][j-R]+f[i- 阅读全文
posted @ 2020-06-22 11:38 chstor 阅读(120) 评论(0) 推荐(0)
摘要:拼数 把整数转换为字符串 自定义排序函数:如果a+b>b+a,则把a排在前面,否则将b排在前面(对于字符串a、b,a+b表示连接两个字符串形成一个新串) #include<bits/stdc++.h> using namespace std; #define maxn 1010 #define in 阅读全文
posted @ 2020-06-22 09:29 chstor 阅读(151) 评论(0) 推荐(0)
摘要:明明的随机数 桶排序,把在区间输入的数都标记为1 适用于这种数据范围不是很大的 #include<bits/stdc++.h> using namespace std; #define maxn 1010 #define inf 0x3f3f3f3f #define mm(a,x) memset(a 阅读全文
posted @ 2020-06-22 09:27 chstor 阅读(119) 评论(0) 推荐(0)
摘要:校门外的树 模拟写法 把在区间的所有都标记一下,没标记的计数 这个题数据范围不是很大,可以这样 #include<bits/stdc++.h> using namespace std; const int maxn=1e4+2; int cnt[maxn]; int main(){ int l,m; 阅读全文
posted @ 2020-06-22 09:25 chstor 阅读(172) 评论(0) 推荐(0)
摘要:纪念品分组 贪心策略:最大的先和小的组合 先从小到大排列,然后从左右两边开始找符合条件的两件纪念品,如果不符合,就让右边的单独放一组 #include<bits/stdc++.h> #define maxn 30005 using namespace std; int a[maxn]; int ma 阅读全文
posted @ 2020-06-22 09:03 chstor 阅读(228) 评论(0) 推荐(0)
摘要:铺地毯 覆盖地面某个点的最上面的那张地毯的编号 从后往前枚举,前提是这个点在地毯上面 #include<bits/stdc++.h> #define maxn 100005 using namespace std; struct Node{ int x,y,up,right; }a[maxn]; i 阅读全文
posted @ 2020-06-22 08:53 chstor 阅读(147) 评论(0) 推荐(0)
摘要:数学考试 区间求和问题可以想到一个常用算法:前缀和。区间的和可以用方便地求出。 维护第一个长度为k的最大值,枚举第二个长度为k的起点,答案就是max(ans,当前长度为k的序列和+第一个长度为k的序列和) #include<bits/stdc++.h> using namespace std; #d 阅读全文
posted @ 2020-06-22 08:50 chstor 阅读(170) 评论(0) 推荐(0)
摘要:一、枚举 一一列举 不重复、不遗漏 优化枚举的基本思路:——减少枚举次数 1、选择合适的枚举对象 2、选择合适的枚举方向——方便排除非法和不是最优的情况 3、选择合适的数据维护方法——转化问题 eg:数列求和问题 给你一个数列(1≤n≤100000),有q(1≤q≤100000)次询问,每次询问数列 阅读全文
posted @ 2020-06-21 18:33 chstor 阅读(243) 评论(0) 推荐(0)
摘要:奇♂妙拆分 简单的质因子拆分题,计数注意是从1开始. #include<bits/stdc++.h> using namespace std; void chai(int n){ int cnt=1; for(int i=1;i<sqrt(n);i++){ if(n%i==0){ n/=i; cnt 阅读全文
posted @ 2020-06-19 21:28 chstor 阅读(168) 评论(0) 推荐(0)
摘要:糖糖别胡说,我真的不是签到题目 先假设所有人都不会被消灭,求出第n秒的所有人的战力 从后往前遍历,分别记录两个队的战力最大值,如果第i个人的战力小于后面另一个队的最大战力值,则一定会被消灭 #include<bits/stdc++.h> using namespace std; #define ll 阅读全文
posted @ 2020-06-19 21:14 chstor 阅读(130) 评论(0) 推荐(0)