二分
借教室(差分): https://www.acwing.com/solution/content/230163/
分巧克力(长分n个正): https://www.acwing.com/solution/content/230164/
管道(区间合并): https://www.acwing.com/solution/content/230224/
技能升级(多路归并): https://www.acwing.com/solution/content/231481/
四平方和(手写哈希): https://www.acwing.com/solution/content/235598/
牛的学术圈l(双指针): https://www.acwing.com/solution/content/230944/
盖楼(容斥原理:集合运算): https://www.acwing.com/solution/content/239866/
冶炼金属: https://www.acwing.com/solution/content/230172/
前缀和(数组要开大一点,读入从1开始读,初始化前缀和数组都是i从1开始)
一维前缀和(模板): https://www.acwing.com/solution/content/230487/
二维前缀和(模板): https://www.acwing.com/solution/content/230488/
递增三元组: https://www.acwing.com/solution/content/230516/
壁画: https://www.acwing.com/solution/content/230298/
统计子矩阵(双指针,记得): https://www.acwing.com/solution/content/230511/
K倍区间(手写哈希): https://www.acwing.com/solution/content/230499/
差分(数组要开大一点,读入从1开始读,初始化差分数组都是i从1开始)
一维差分(模板): https://www.acwing.com/solution/content/230529/
二维差分(模板): https://www.acwing.com/solution/content/230563/
空调(差分数组各元素的和一定为0,差分数组的长度是n+1): https://www.acwing.com/solution/content/230635/
棋盘(二维差分): https://www.acwing.com/solution/content/230787/
重新排序(排序不等式):
排序不等式:C正序A正序取最大值,C正序A逆序取最小值 公式: C1 x A1 + C2 x A2 +…+ Cn*An
就是出现频率最大对应最大的数,取最大值; 出现频率最大对应最小的数,取最小值
https://www.acwing.com/solution/content/230794/
双指针
最长连续不重复子序列(模板): https://www.acwing.com/solution/content/230806/
数组元素目标和: https://www.acwing.com/solution/content/230839/
序列可以不连续,字串是连续的
判断子序列: https://www.acwing.com/solution/content/230863/
日志统计: https://www.acwing.com/solution/content/231137/
摆放棋子(二分+前缀和): https://www.acwing.com/solution/content/236296/
统计子矩阵(双指针,记得): https://www.acwing.com/solution/content/230511/
牛的学术圈l(二分): https://www.acwing.com/solution/content/230944/
归并排序
归并排序(模板): https://www.acwing.com/solution/content/231127/
逆序对的数量(模板): https://www.acwing.com/solution/content/231134/
看到相邻交换,就可以考虑归并排序,
超快速排序(求交换次数本质就是求逆序对数量): https://www.acwing.com/solution/content/234170/
小朋友排队(对于1+2+3+…+n 求和公式:(an)(an+1)/2): https://www.acwing.com/solution/content/231187/
火柴排序(离散化): https://www.acwing.com/solution/content/231255/
多路归并(更多体现的是一种思想,而不是像归并排序,理解为n个排序好的数列)
鱼塘钓鱼(模板): https://www.acwing.com/solution/content/231456/
技能升级(二分): https://www.acwing.com/solution/content/231481/
丑数(模板 3个质数,3个指针去维护。num = (t * i,t * j, t * k) 再看看是哪个值取到了最小,对应的指针就++: https://www.acwing.com/solution/content/231495/
谦虚数字(模板 n个质数,n个指针去维护。num = (a[1] * idx[1],…,a[n] * idx[n]), https://www.acwing.com/solution/content/231539/
贡献法(找某个字符对于答案的贡献)
孤独的照片(分左右区间去找): https://www.acwing.com/solution/content/231611/
牛的基因学: https://www.acwing.com/solution/content/232143/
字串分值(分左右区间去找,注意边界情况): https://www.acwing.com/solution/content/231646/
日期问题
1年1月1日 到 a日期,一共有t天
1年1月1日 到 b日期,一共有k天
所以a、b日期之间的天数= Math.abs(t - k + 1) 也可以直接用计算器
日期差值(模板 1.先定义每个月的天数 2.判断闰年 2月加一天 3.获取某年某月的天数): https://www.acwing.com/solution/content/232434/
//如何分割字符串
String[] parts = 输入的字符.split(“/”); int a = Integer.parseInt(parts[0]);
//%d用于整数格式,%02d用于确保月份和日期都有两位数,可以用来填充0,%n用于换行。
System.out.printf(“%d-%02d-%02d%n”, year, month, day);
int year = date / 10000;//取前四位
int month = date % 10000 / 100;//先取后四位,再取前两位
int day = date % 100;//取后两位
日期问题: https://www.acwing.com/solution/content/232472/
回文串左右对称,因此可以只枚举左半边,这样只需枚举 0∼9999总共一万个数,然后判断:
1.整个八位数构成的日期是否合法;
2.是否在范围内
//如何从四位数到八位数
//x和r都等于r
int x = i, r = i;
//通过循环4次,拼凑成完整的八位数
for (int j = 0; j < 4; j++) {
//r先乘于10,再加上x的最后一位
r = r * 10 + x % 10;
//去除x的最后一位
x /= 10;
}
回文日期: https://www.acwing.com/solution/content/232479/
//可以使用import java.time.; LocalDate startDate = LocalDate.of(年, 月, 日);
//!currentDate.isAfter(endDate) 看看开始时间是否在结束时间后面
//currentDate.getDayOfWeek().getValue() 可以得到现在的时间是星期几
//currentDate.getDayOfMonth() 可以得到现在的时间是某个月的第几天
//currentDate = currentDate.plusDays(n) 当前的时间向后走n天
跑步锻炼: https://www.acwing.com/blog/content/51826/
//可以使用import java.time.; LocalTime startTime = LocalTime.of(小时, 分, 秒);
工作时长: https://www.acwing.com/blog/content/52245/
日期统计(dfs剪枝): https://www.acwing.com/blog/content/52282/
区间合并
区间合并(模板): https://www.acwing.com/solution/content/232722/
挤牛奶(模板题): https://www.acwing.com/solution/content/232762/
校门外的数(模板题): https://www.acwing.com/solution/content/232754/
管道(二分): https://www.acwing.com/solution/content/230224/
递归(dfs) 存点的数组和st数组适当开大一点点
利用Stern–Brocot树:f[0/0,1/1]->f[0/0,1/2]和f[1/2,1/1],依次类推
其实就是 a/b < a+c/b+d < c/d ,对分成的两个区间,不断得去找中间值
本题就是f[0/1,1/1]->…
有序分数(最简分数:分子与分母互质的数): https://www.acwing.com/solution/content/233268/
残垣断壁(利用dfs 求联通块的数量和连通块的点数): https://www.acwing.com/solution/content/240156/
动态网格(DFS实现Flood Fill): https://www.acwing.com/solution/content/234890/
母亲的牛奶(DFS或者BFS): https://www.acwing.com/solution/content/234853/
全球变暖(DFS或者BFS): https://www.acwing.com/solution/content/234655/
分糖果(DFS): https://www.acwing.com/blog/content/52254/
递归(树与图) 存点的数组和st数组适当开大一点点
//曼哈顿距离(从a点走到b点的最短距离) = Math.abs(x1 - x2) + Math.abs(y1 - y2)
奶牛选美(曼哈顿距离): https://www.acwing.com/solution/content/233847/
扫雷(手写哈希): https://www.acwing.com/solution/content/234110/
树的重心(模板 要自己建图): https://www.acwing.com/solution/content/233320/
递归(回溯/剪枝) 存点的数组和st数组适当开大一点点
排列数字(回溯模板): https://www.acwing.com/solution/content/232844/
木棒(剪枝模板): https://www.acwing.com/solution/content/233405/
飞机降落(回溯): https://www.acwing.com/solution/content/233797/
//对于每个格子考虑放皇后还是不放皇后
//反对角线和对角线坐标,就是截距b
//反对角线y=x+b 正对角线y=-x+b b=y-x(为了防止负数,加一个n) b= y+x
n-皇后问题(回溯): https://www.acwing.com/solution/content/233117/
//回溯(会TLE):枚举八个方向 回溯的时候就是回溯八个方向
国际象棋(回溯或者状态压缩DP): https://www.acwing.com/solution/content/237011/
日期统计(dfs剪枝): https://www.acwing.com/blog/content/52282/