- 博客(12)
- 收藏
- 关注
原创 2019CCPC A . Angle Beats(斜率哈希)
题目大意:给定平面内的n 个点,m次询问,每次询问给出一个点,询问这个点与给定的n个点中的某两个点构成直角三角形的方案数。n,m<=2000,4000ms设询问的点为 q 点分为两种情况,q 点为直角顶点和 q 为锐角顶点。第一种情况使用一个 map 存下所有其它点与 q 点的斜率,然后在map中找乘积为 -1 的斜率的对数,第二种情况先预处理 n 个点中每个点的每种斜率的点的个数,然后询问的时候遍历一遍算出对应斜率并求查询负倒数斜率的个数即可。然鹅这两种操作使用map会超时:整.
2021-10-31 23:17:46
446
2
原创 摩尔投票法
例:169. 多数元素 - 力扣(LeetCode) (leetcode-cn.com)题目:找出一个数组中出现次数超过一半的数字。摩尔投票法可以使用 O(n) 的时间复杂度和常数的空间解决这个问题。把出现次数超过一半的数字定义为多数元素首先维护一个变量,和它的票数,假设它就是答案,遍历数组,如果当前的数和维护的值相同,就为它的票数加一,否则减一,当票数减到0的时候就更新这个变量为当前值,在保证存在多数元素的情况下,遍历到最后时剩下的数一定为这个数组中多数元素。这个算法的原理可以看作每次
2021-08-17 21:08:20
115
原创 贪心——田忌赛马
例: Tian Ji -- The Horse Racing - POJ 2287 - Virtual Judge (vjudge.net)题目就是田忌赛马,不过不是3匹而是n匹马,也不是一一对应的比齐王的慢一点,而是输入的。首先田忌赛马的思想应当用最慢的马拼掉对方最快的马,所以从最慢的马下手,先和对方最慢的马比较,如果快说明己方所有的马都能胜过对方这匹马,此时用最慢的赢当然收益最大,如果慢,此时发挥己方的马的最大价值来拼掉对方最快的马,如果相等,再用己方最快的马和对方最快的马比较,如果快,则己方的
2021-08-15 16:59:28
187
原创 ST表,O(1)查询区间最大(小)值
ST表首先预处理了一部分的区间最大值,处理的部分的左端点为数组的每个点,长度为的所有区间,个数就是个,查询时将查询的区间分成可能有重叠的两部分,查询的值就是这两部分的最大值,分成的两部分的长度均为,这样两部分就都可以直接查询,具体实现:const int N = 1e5 + 7;int f[N][18];int a[N];int n, m;int getmax(int l, int r){ int len = r - l + 1; int k = log(le..
2021-07-26 09:35:51
631
原创 除法取模及快速幂模板
除法是不能直接相除取模的,所以需要将除法转换为乘法即:变形得 ≡ 1(mod p)由费马小定理 %p ≡ 1 (mod p) 得 ≡ 1 (mod p)即 b 对质数 p 的逆元快速幂模板:int Mod = 1e9+7;ll gmi(ll a, ll b = Mod - 2){ if (a == 0 || a == 1) return a; ll res = 1, t = a; while (b) { ...
2021-07-25 18:18:16
515
原创 线段树模板+简短解析
不多bibi,线段树懂得都懂,会用才是最难的struct Node{ int l,r; //int s/Max/Min/.....想要用线段树存的东西, 下文中用X代替 //int lz //懒标记,在需要区间修改的题目中使用}tr[N];inline void push_up(int s){ //通过子节点更新父节点,要求X能过从子区间推导出来比如:和、最大值、最小值。但是种类数之类的就不行}inline void push_down(int s)//专门为区间修改设计.
2021-07-14 21:23:25
101
原创 Nim游戏入门+SG函数
对于经典的Nim游戏,只需要把每一堆初始状态都异或起来,最后得到的结果非0的为必胜状态,结果为0的为必败状态。原理:异或的结果非0的状态总能通过一次取物品操作,将此状态转化为结果为0的状态;而异或结果为0的状态如果不是最终状态(所有堆都是0)经过一次取物品操作,总会变为异或结果非0的状态。例:891. Nim游戏 - AcWing题库SG函数SG函数的自变量为有向图游戏中能达到的一种状态,因变量为一个数。定义某个状态的SG值为其不能到达的SG值的最小值,举个栗子:...
2021-07-09 05:31:22
328
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人