08 2019 档案
摘要:暑假还有两天 总之,感觉这个暑假还是过得挺充实的吧,从6月底考完期末就一直在学校没有回家,唉,越是回不了家,才越感受到回家的弥足珍贵吧。 上个寒假划了一寒假的水,现在想来真的很后悔,前几天偶然间翻到 学姐在寒假集训的时候给我们做的 ,才发现自己错过了很多学习的机会,其实很多自己在暑假不断在网上找、自
阅读全文
摘要:关于 和`upper_bound()`: 参考: "关于lower_bound( )和upper_bound( )的常见用法" 注意:查找的数组必须要是排好序的。因为,它们查找的方式也是二分查找,所以,复杂度为 ①从小到大排序 :从数组的 位置到 位置二分查找 第一个大于或等于 的数字,找到并返回该
阅读全文
摘要:"F. Remainder Problem" 这个其实并不难,只是看看考察有没有分块的思路 思路:用一个 来记录所有 中所有 的和,在查询的时候可以达到复杂度位O(1) 当然因为数据很大,不能够分很多块,而且也没有必要分很多块,因为如果在进行 操作的时候,如果 ,那么在数据范围内只有五个数满足条件,
阅读全文
摘要: "E. XOR Guessing" 第一次做这种交互题,刚开始还看不懂,现在已经差不多可以理解了,清空缓存区用 1~100 1~100 (1~100) using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0
阅读全文
摘要:参考: "负数的位运算" "原码, 反码, 补码 详解" 一直都不是很懂负数的位运算,还有反码,补码,源码这些,总结一下 关于反码,补码,源码的定义看参考博客 在每一个二进制数中,最高位是用来表示它的符号的,负数为1,正数为0 原码 就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值
阅读全文
摘要:"Number Of Permutations" 思路:利用容斥,首先所有可能的排列肯定是 ,然后可能会有三种 bad 的情况: ①第一个元素的排列是非递减 ②第二种是第二个元素的排列是非递减 ③这两个可能出现的重叠情况,意思就是说同时导致①②成立 这个时候我们利用容斥的思想,用 即可 我们把所有的
阅读全文
摘要:"打地鼠Ⅱ" 这个也是一个 dp ,可能是我 dp 的题写的太少了吧,后面得多练练 dp 的题。 思路:把所有的数据存于一个结构体中,然后进行排序,排序的规则是,时间短的优先,分数高的优先。 :表示打 个地鼠可以得到的最大分数 最后求 的时候需要在所有的 中找到最大值,因为,可能出现打的地鼠较少但是
阅读全文
摘要:"聚餐" 赛后来看真的感觉是一道很简单的题,其实赛中就已经有点思路了,但是 wa 了很多发,可能是因为代码改过了很多版所以思路有一点乱吧,补题的时候就是把整个题的思路都理清了之后才开始敲的代码,思路理顺了之后,写起来就很流畅了,几分钟就写完了,一发 Ac。要是下次还是一直 wa 的话就尝试一下,重头
阅读全文
摘要:"小菜吃鸡腿" 特别裸的区间 dp ,而且之前还写过一样的题,居然没写出来,55555,主要还是因为把区间 dp 的思路给忘了 区间 dp 的主要思路:假设有一段区间 ,当 和`r [l,r] k`使得这整个区间 的值为最大(即满足题目要求)。 整理一下区间 dp 的几个步骤: 总共三个 第一个 遍
阅读全文
摘要:总结一下今天打的这两场排名赛: 看到题目千万不要着急,不要为了去抢一血而不小心 wa 几发,题目一定要读仔细,揣摩可能出现的特殊情况,总之敲题之前一定要想清楚,然后再开始动手,这样效率会快很多,也能够避免很多没有必要的失误 关于读错题:这个真的是硬伤,我要哭了,刚A完第一题的时候还是 rank2 然
阅读全文
摘要:Dijkstra 思路:每一次枚举当前没有枚举过的 值最小的点 ,然后对该结点进行标记,然后再分别遍历 的每一条边,用 去更新 , ,`w[x][y]`表示 x 与 y 之间的边的权重,具体 Dijkstra 的结构实际上是跟 bfs 差不多的,可以利用一个优先队列来对 Dijkstra 进行优化。
阅读全文
摘要:Floyd 参考: "Floyd 算法" "第一篇Floyed题解" 模板题: "寻宝之路Clear And Present Danger" "牛栏Cow Hurdles" Floyd的思路:首先 表示的是 到 的最短路径的长度, 初始化的时候,
阅读全文
摘要:参考: "当小球遇上盒子" 默认问题:把 n 个小球放到 m 个盒子里,分别有三项要求: ①球是否相同 ②盒子是否相同 ③能否有空盒。 1.球相同,盒子不同,不能有空盒 利用插板法,n 个小球中间会存在 n 1 个空,用 m 1 块板插入这些空中,可以将 n 个小球分为 m 块,因此: $$ ans
阅读全文
摘要:"K Count the Buildings" 参考: "Count the Buildings" 思路可以借鉴,但是代码略有问题 写的时候 re 了 9 发,然后把变量定义的顺序换了一下居然 A 了,以为这个是个骚操作,最后才发现是真的会越界,当 f+b n+2 的时候就有可能会发生越界,而这种情
阅读全文
摘要:"Buy the Ticket" 参考: "Buy the Ticket" 上面博客中好像 n 和 m 的意思写反了,不过问题不大,反着输入就好了,题目中说 n 是 50 的人数,m 是 100 的人数,这里反了一下。另外还需要用到高精度。 公式(m 是 50 的人数,n 是 100 的人数): $
阅读全文
摘要:`from kuangbin` 包含了 `+ / ^ % = (istream&, BigNum&); friend ostream& operator(const BigNum & T)const; bool operator==(const BigNum & T)const; bool oper
阅读全文
摘要:看看就好了(滑稽) 数据结构 栈 1. 栈 2. 单调栈 队列 1. 一般队列 2. 优先队列/单调队列 3. 循环队列 4. 双端队列 链表 1. 一般链表 2. 循环链表 3. 双向链表 4. 块状链表 5. 十字链表 邻接表/邻接矩阵 1. 邻接表 2. 邻接多重表 Hash表(哈希表) 1.
阅读全文
摘要:"Game of Connections" 这个题也是直接求 "卡特兰数" ,不过数据有一点大,不能够直接求,因为杭电不能交 python 不然我就用 python 写了.... 对于这么大的数据,还不能写 python 就只能用 "高精度" 啦 代码:
阅读全文
摘要:`From kuangbin` 支持加法,乘法, `char BigInt` 初始化
阅读全文
摘要:"D 小兔的棋盘" 思路:很裸的 "卡特兰数" 但如果直接上,会爆 ,所以需要用一些技巧 两种写法: 1.使用卡特兰数最基本的公式: 注: 代码: cpp // Created by CAD
阅读全文
摘要:参考: "卡特兰数" 很经典的问题有:合法括号匹配、矩阵从左下角到右上角不走对角线、二叉树构成问题、凸多边形的三角形划分等等 一般会用到的公式有 注: 通项公式: $$ f(n)=\bino
阅读全文
摘要:参考: "关于\_\_int128" 本身可以进行的运算有 还有各种位运算符 但是 不可以进行输入输出的操作,如果想要进行输入输出需要自定义函数 可以在 64 位的编译器中运行 亲测 大概最多能够储存 4e22 左右的数 输入: cpp void print(__int128 x) { if (x9
阅读全文
摘要:"RPG的错排" 直接利用错排公式进行求解 这里需要注意的问题是,组合数不能够打表算,因为会爆 long long 组合数计算方法: cpp temp=1; for(int j=1;j 另外需要注意的是如果要表示全部猜对的话,需要在最后加上 1,因为错排公式中 代码: cpp // Created
阅读全文
摘要:错排公式的推导可以看: "不容易系列之(4)——考新郎" cpp ll sum[30]; for(int i=3;i
阅读全文
摘要:"不容易系列之(4)——考新郎" 参考: "hdu 2049 不容易系列之(4)——考新郎 错排" 先从 N 个人里面寻找 M 对错排的对象,那么就应该在最后的结果上乘一个 然后对这 M 个对象进行错排,错排的公式 ,起始项: 注: 来表示 i 对夫妻来错排的可能情况数量 需要注意的:不用 long
阅读全文
摘要:"Tree" 参考 xk 老哥的博客: "POJ 1741 Tree 点分治" 找重心: cpp int d[maxn],dcnt; void dfs(int fa,int u,int w) { d[++dcnt]=w; siz[u]=1; for(int i=head[u];~i;i=e[i].n
阅读全文
摘要:"F1. Complete the Projects (easy version)" "F2. Complete the Projects (hard version)" 参考: "Complete the Projects" 简单说就是当 b =0 是肯定是 a 小的优先的,需要注意的就是 b 需
阅读全文
摘要:vector 开动态数组: 求一个数二进制中 1 的个数: 求一个数二进制中前缀 0 的个数: 求一个数二进制中后缀 0 的个数: 求 x 与 y 的 gcd: (需要头文件 algorithm) 补充: "一些奇奇怪怪的快捷小函数"
阅读全文
摘要:持续更新... Wrong Answer 1. 数组开小了 2. 爆 int Time Limited Error 1. 数组开小了 2. 爆 int 3. 数组开得过大,有可能会导致 tle Runtime Error 1. 数组开小了 2. INTEGER_DIVIDE_BY_ZERO 除零错或
阅读全文
摘要:"D2. Remove the Substring (hard version)" 思路:其实就是贪心吧,先从前往后找,找到 t 可在 s 中存在的最小位置 (pre),再从后往前找,找到 t 可在 s 中存在的最大位置(last),然后 last [ i+1 ] pre [ i ] 1 表示的即是
阅读全文
摘要:"Housewife Wind" 参考博客: "POJ2763 Housewife Wind(树剖+线段树)" 差不多是直接套线段树+树剖的板子,但是也有一些需要注意的地方 建树: cpp void update(int x,int s,int t,int k,int p) { if(s==t) {
阅读全文
摘要:"A Aragorn's Story" 直接套 "线段树+树剖" 板子 代码: cpp // Created by CAD on 2019/8/12. include define lson (p 1; build(l,m,lson),build(m+1,r,rson); d[p]=d[lson]+
阅读全文
摘要:其实树状数组和线段树写树剖都差不多,只是换了一种储存数据的方式,一种占用空间小,但是相对耗时,一种占用空间大,但是很快。 模板题: "树链剖分" 用树状数组会 tle 但是这也是一种思路 cpp // Created by CAD on 2019/8/11. include using namesp
阅读全文
摘要:模板题: "树链剖分" 参考博客: "树链剖分详解(洛谷模板 P3384)" 前置技能: "线段树" cpp void build(int s,int t,int p) { if(s==t) { d[p]=wt[s]%mod; / 此处wt[]是排序好之后的序号对应的权重 / return; } i
阅读全文
摘要:"E. Compress Words" 直接套 KMP 即可(那为什么打 cf 的时候没有想到...),求出后一个单词(word)的前缀数组,然后从前面已得的字符串的末尾 word. length () 开始查询利用 "前缀数组" 进行优化即可 代码: cpp // Created by CAD o
阅读全文
摘要:"D. White Lines" 主要思路就是利用差分 对于行:如果在某一个点上,向右下角涂掉 k k 的矩形能够使得新出现一行 “B” 那么就在这个点上 +1(这里的加 +1 需要利用差分来完成) 列同理,如果有现成的空白行,记录一下即可,最后直接加上 代码: cpp // Created by
阅读全文
摘要:差分的还原操作千万不能 记错,是 ch[i][j]+= ch[i 1][j 1]+ch[i 1][j]+ch[i][j 1] 模板: cpp / 还原为正常数组 / for (int i=1; i
阅读全文
摘要:参考:线段树 模板题:线段树模板 写线段树需要注意的几点: build和update的时候最后记得加和!(d[p]=d[p<<1]+d[p<<1|1]) lazy标记下传后记得把父节点的清除!(laz[p]=0) // Created by CAD #include <bits/stdc++.h>
阅读全文
摘要:"C Color" 参考: "CF GYM 100548 Color(2014ACM西安现场赛Problem F)" "Codeforces Gym 100548F Color (组合数+容斥)" 思路:可以参考第一个博客的思路,很容易理解 需要注意的地方:因为数据很大所以一不小心就会爆,所以最好都
阅读全文
摘要:"B Co prime" 参考: "HDU 4135 Co prime (容斥原理)" 这个题利用的是容斥原理,同时也利用到了求质数个数的一个技巧—— 1~m 内与 n 不互质的个数为 m/n 个: 同时使用容斥原理的时候求各种组合的时候利用了二进制的技巧: cpp // Created by CA
阅读全文
摘要:"A Misha and Permutations Summation" 首先这个 mod n! 因为数量级上的差别最多只会对康拓展开的第一项起作用所以这个题并不需要把 ord (p) 和 ord (q) 的具体值算出来,因为最后还需要进行康托逆展开所以用一 个数组来储存对应的值即可然后利用变进制的
阅读全文
摘要:"C. You Are Given a WASD string..." 主要看的还是思维,分别求出在上下左右四个方向移动的最大幅度( mov_up, mov_down, mov_right, mov_left )然后对于垂直方向如果 mov_up == mov_down 那么 robot 最后的位置
阅读全文
摘要:"B. You Are Given a Decimal String..." 这个题需要求出从某一个尾数 n 变为 m 所需要的 x 和 y 的最小个数(i+j) 那么就需要预处理出一个数组来存放这个值。数组 b[ ] 中存的是所需要多添加的数的个数 (i+j 1) cpp int b[10]; f
阅读全文
摘要:"F. String Compression" 利用dp和 "前缀数组" 来写 dp[i] 所表示的东西是 字符串 s[0:i] (不包括 s[i])能够压缩的最短长度 bj[i][j] 表示的是字符串 s[i:j+1] (不包括 s[j+1])能够压缩的最短长度 代码: cpp // Create
阅读全文
摘要:前置技能: "前缀数组" 参考博客: "KMP算法(kuangbin)" cpp const int maxn=1e5; int Next[maxn]; / 求前缀数组 / / t[0]对应Next[1] / / Next[0]= 1 / void getNext(string t) { int i
阅读全文
摘要:参考博客: "KMP算法(kuangbin)" 另讲得比较好的博客或网站: "前缀函数与 KMP 算法" "KMP算法(研究总结,字符串)" cpp const int maxn=1e5; int Next[maxn]; / 求前缀数组 / / t[0]对应的Next数组值为Next[1] / /
阅读全文
摘要:| 题目 |A|B|C|D|E|F|G|H|I|J|K| |: :|: :|: :|: :|: :|: :|: :|: :|: :|: :|: :|: :| | "第一场" |||||||||||\\| | "第二场" |||||||||||\\| | "第三场" |||||||||||\\| |
阅读全文
摘要:| 题目 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 | 1011 | 1012 | 1013 | | : : | : : | : : | : : | : : | : : | : : | : : | : : | : :
阅读全文
摘要:"Minimal Labels" 这个题需要用到 "拓扑排序" 的思维,但是这个题还有一个条件——字典序最小,因此可以用一个递增的优先队列来维护,每找到一个入度为 0 的点就把它 push 进去因而每一次判断的点总是当前入度为 0 的字典序最小的点。 代码: cpp // Created by CA
阅读全文
摘要:"D. Suitable Replacement" 这个题统计出 s 和 t 中的各字母个数以及“?”的个数,直接暴力即可,s中不足的字母可用 “?“来替代 这个题的另一种解法是二分 s 中可以出现的 t 的次数,从而找到最大的 the suitability of string s . 代码: c
阅读全文
摘要:"C. Multi judge Solving" 写这个题的时候也是思维出了漏洞....容易漏掉的一点就是在别的 oj 上做了题之后可能不能够马上回原来的 oj 上做题,这是写循环的时候需要注意的的方,需要嵌套一个 while 进去。 代码: cpp // Created by CAD on 201
阅读全文
摘要:"B. Five In a Row" 这个题的数据范围不大只有 10 10 的棋盘,就是下五子棋,直接暴力求解即可。枚举每一个可能落子的位置,然后把棋盘扫一遍,如果出现五子连线即输出 YES,在扫描棋盘的时候可以枚举每一个点的八个方向,看是否存在有五个“X”连在一起,这样代码量会少一些。 cpp /
阅读全文
摘要:"A. Binary Protocol" 这道题要唯一注意的一点就是数字0的表示—— 0个“1”来表达 ,所以字符串“100”所表示的数字就是100 附代码: cpp // Created by CAD on 2019/8/6. include define ll long long define
阅读全文