摘要:
链接:P1029 知道两个数的gcd和lcm,很容易知道gcd*lcm就是两数之积 然后我们从二开始枚举每一个因子,检查是不是乘积的因数,如果是,我们就检查这个数和 另一个数的gcd是不是相等就行了 1 #include<iostream> 2 3 using namespace std; 4 in 阅读全文
摘要:
链接:P2919 一道非常暴力的搜索题 注意的是,我们要从高出往低处搜,所以要sort一边 然后没有什么值得成为绿题的部分了 绝对是恶评 题面有歧义,我们在搜索的时侯扩展的条件是<=,不是等于 #include <iostream> #include<cstdio> #include<algorit 阅读全文
摘要:
链接:P3375 思路:理论版 通俗易懂版 KMP主要就是有一个next数组,这个数组可以让我们在匹配不成功的时候不用去从开始的位置+1去匹配,而是直接“ 跳”过来,来做到o(n+m)的复杂度的 #include<iostream> #include<cstring> #include<iostre 阅读全文
摘要:
链接:P2024 建三个并查集空间太大了,应该写加权并查集 这道题的关系是个环,转过来转过去的。我们的权值就定义成这个点与父节点的关系(0=同类,1=吃 2=被吃) 这样做,我们就要在find时如果搞路径压缩,就要麻烦一点,因为我们要把他与父节点的关系更新成与 祖先节点的关系。 非常易证得,关系就是 阅读全文
摘要:
链接:P3902 这道题就是最长上升子序列的模板题,因为我们修改的时候可没说不能改成小数(暴力) 最长上升子序列有很多求法,这道题dp是不行的,TLE。 就要用nlogn的二分算法 这个算法是这样的,建立一个数组了,low,其中low[i]表示长度为i的上升子序列的结尾最小值 来考虑维护它,如果一个 阅读全文
摘要:
链接:P1209 这道题是一道贪心+排序的题目 从样例就可以知道,牛棚的输入并不一定有序,我们要先排序 然后考虑贪心,假如有无限多的木板,我们只要在每个牛棚前放一块就可以了。 这样就可以让总长度最小。 但是木板有限,而且如上放的木板都是不能省略的,但是我们可以把两块木板拼起来! 这样就可以减少木板总 阅读全文
摘要:
链接:P1910 一看题目,这是道二维背包 然而暴力出奇迹啊 我就写了个dfs 然后TLE,吸了氧也TlE, 怎么办呢,剪枝!!1 思路:搜索,(我写的奇奇怪怪,题解都是搜索请不请第i个人,我写的是当还剩下 多少能力和钱(雾)) 这种写法实在太奇怪了,以至于还要剪枝,还有一个奇葩边界条件qwq。 就 阅读全文
摘要:
链接:P1182 一道一眼就能看出来的二分题,而且深刻让我感受到了什么叫不开long long 一场空 (因为这个卡了我半个小时QWQ) 思路还是两部分,二分部分是模板,没什么好说的。 check部分就是定义一个flag记录上一个段的结尾地址,然后用前缀和计算区间和,如果比mid大, 就更新flag 阅读全文
摘要:
链接:P1583 一道非常水,非常恶心的大模拟 快速排序拯救世界的题 看体面,什么w,e,d,c真多,然而事实上,我们只要用一个结构体存下编号和w,然后按照题意 模拟,最后加上e就行了 读懂题面是这道题的最大难点 1 #include<iostream> 2 #include<algorithm> 阅读全文
摘要:
链接:P1433 一道很水的搜索题,唯一的难点就是预处理,不过公式都写出来了也没什么难的 坑点还是有的,比如说有一个(两个点)的坐标都是一堆小数,就会wa掉 再也没什么难的了 #include<iostream> #include<cmath> #include<cstdio> #include<w 阅读全文
摘要:
链接:P2813 一道贪心练手题,数据很水,我把边界条件写错了都是90分 思路很简单,读入后sort一边,根据贪心,我们用两个指针,指向开头,然后开始比较。 如果能摧毁,就++,检查下一个。 如果不能,就把攻击力先加到ans里,检查下一个攻击力 这样如果最后没有防御了,我们就只需要把剩下的攻击力加上 阅读全文
摘要:
我们的生活充满了未知与玄学 链接:P5367 康拓展开在此题就是求一个全排列的排名。 我觉得它适合用来优化内存,这样存全排列虽然还要展开,但是内存小啊。 康拓展开的原理 首先,我们要求出阶乘,不然会TLE, 然后根据公式计算就可以了。 ‘但是我们怎么知道对于每一个数,他是当前没有用过的数的排名呢? 阅读全文
摘要:
链接:P1816 st表的一道模板题 链接:P1816 st表的一道模板题而已 你都可以用P3865稍微一改水过去 就是这么简单 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 using namespace std; 5 in 阅读全文
摘要:
链接:P3865 st表是一个用来解决RMQ问题的表 st表是一个二维数组,表示的是i~i+2^j-1范围的最值 (这东西和区间DP好像) 初始化: 因为2^0=1; 所以说st[i][0]存的就是i~i范围的最值(就是他自己) for(int i=1;i<=n;++i){ cin>>st[i][0 阅读全文
摘要:
这是一道搜索水题 (都橙题了能不水吗) 链接:P1913 这道题只要搜索就行了。 边界条件?不用考虑的。 因为这是字符串,我们在搜索时要考虑风向(字母) 然而在边界上是个空字符,也不用搜。 至于vis,如果你是倒着搜索的,就是从无风点开始,也不用考虑(因为风向) 1 #include <iostre 阅读全文
摘要:
链接:P4939 这道题肯定是数据结构题。 看一下题面,我们可以建立一个树状数组,维护的是每一天的咕咕咕数量,这样,操作0就变成了 区间加1,而操作0,就是单点查询。 好像比较熟悉欸 就是树状数组模板二 1 #include<iostream> 2 #include<cstdio> 3 using 阅读全文
摘要:
链接:P1894 我觉得这道题如果去掉题面,就是一道蓝题了。 这道题还是裸的二分图匹配,用匈牙利算法就可以AC掉。 什么是匈牙利算法?匈牙利 代码几乎差不多,也不需要优化,读入比模板题还复杂点,(他们应该换一下颜色) 1 #include<iostream> 2 #include<cstring> 阅读全文
摘要:
链接:P5017 看见了动态规划不会怎么办? 搜索,剪枝,记忆化! (cz就是巨啊) 记忆化搜索,搜索第i个人上车后的下一班车的出发时间 数组的二维是第i个人的等待时间。 Orzcz 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring 阅读全文
摘要:
链接:P1330 一道超级大坑题。 一开始我以为是再一个无图染色,结果竟然有一对不相通的子图。 而且还有单独一个点。 这样就麻烦了 一个图染色,要求相邻的点颜色不相通,如果存在,那么把每个点的颜色颠倒也可以。 再这个图里我们就要这个做,运用bfs染色。 然而坑点就在于我们可以颠倒每一个子图的颜色,所 阅读全文
摘要:
链接:P5018 这道题可以写暴力 暴力搜索,首先统计下每一个点的下属节点数,用来统计答案。 然后直接对称搜索就行 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 5 using namespace std; 6 int 阅读全文