08 2021 档案

摘要:CF1537 A: 三种情况: 直接相等. 小于长度,输出1. 大于长度,补充0. #include<bits/stdc++.h> using namespace std; int T,n,b; int main(){ cin>>T; while(T--){ cin>>n; int ans=0,su 阅读全文
posted @ 2021-08-31 20:03 Evitagen 阅读(31) 评论(0) 推荐(0)
摘要:CF1539 A: 分为两种情况: 相同数目。 递减的数目。 第一种情况,每次能有 \(\lfloor \frac{t}{x} \rfloor\) 个,第二段就是等差数列,直接每次 \(-1\) 加和就行。 直接计算即可。 #include<bits/stdc++.h> using namespac 阅读全文
posted @ 2021-08-30 19:27 Evitagen 阅读(33) 评论(0) 推荐(0)
摘要:CF1555 A: 推公式题,每一个都是 \(2.5\) 的时间,那么我们尽量用 \(10\) 。 如果是偶数,那么直接可以凑出来,如果是奇数,就 \(+1\) 变成偶数来凑,再考虑特殊情况即可。 #include<bits/stdc++.h> using namespace std; #defin 阅读全文
posted @ 2021-08-26 20:00 Evitagen 阅读(48) 评论(0) 推荐(0)
摘要:整除分块 可以用到整除分块的形式,大致是这样的: $$\sum_{i=1}^n \lfloor\frac{n}{i}\rfloor $$ 这种式子因为特殊的要求,通常是要求 \(O(\sqrt{n})\) 的复杂度去算。 对于每一个 \(\lfloor\frac{n}{i}\rfloor\) 我们可 阅读全文
posted @ 2021-08-26 15:54 Evitagen 阅读(139) 评论(0) 推荐(1)
摘要:CF1542 A: 直接判断有多少奇数,如果有奇数个奇数,就不行。 #include<bits/stdc++.h> using namespace std; int T,n,cnt; int main() { cin>>T; while(T--){ cin>>n; cnt=0; for(int i= 阅读全文
posted @ 2021-08-25 18:53 Evitagen 阅读(42) 评论(0) 推荐(0)
摘要:CF1547 A: 三点在同一条线上,且障碍点在中间,就需要 \(+2\) 直接曼哈顿距离即可。 #include<bits/stdc++.h> using namespace std; int ax,ay,bx,by,fx,fy; bool flag; int main(){ int t; cin 阅读全文
posted @ 2021-08-24 19:17 Evitagen 阅读(44) 评论(0) 推荐(0)
摘要:Boruvka算法求最小生成树 算法的核心思想是贪心,类似于 \(kruskal\) 算法过程: 维护途中所有联通块,然后遍历所有点和边。 找到每一个联通块和其他联通块相连的最小的一条边。 把连通块合并起来,重复操作,直到剩下一整个连通块。 复杂度分析: 复杂度是 \(O((m+n)log n)\) 阅读全文
posted @ 2021-08-23 22:42 Evitagen 阅读(119) 评论(0) 推荐(0)
摘要:CodeForce 1550 A 考虑最少,我们可以将序列数字设为: \(1,3,5,7,9....\) 进行前缀和计算,找到 \(S\) 匹配到的区间值,其最少的数的个数即为对应大前缀和的下标。(这是一种时间复杂度更优的算法) #include<bits/stdc++.h> using names 阅读全文
posted @ 2021-08-23 19:25 Evitagen 阅读(49) 评论(0) 推荐(0)
摘要:线性筛 线性筛可以在严格 \(O(n)\) 的时间内筛出积性函数的值 拥有常见的套路。 假设 \(n = p_1^{a_1} p_2^{a_2} \dots p_k^{a_k}\) 如果我们能快速得到 \(f(p_i),f(p_i^{k+1})\) 的取值,那么直接套板子即可。 定义: \(p_i\ 阅读全文
posted @ 2021-08-23 18:16 Evitagen 阅读(164) 评论(0) 推荐(0)
摘要:20210820 eriri 先去 \(i\) 比 \(j\) 更加优秀,就需要满足: \((a_it+b_i+1)*a_j\leq(a_jt+b_j+1)*a_i\) 即 \((b_i+1)*a_j\leq(b_j+1)*a_i\) 我们先对所有商店进行这样的排序,然后实际情况就在序列中。 当没有 阅读全文
posted @ 2021-08-20 20:27 Evitagen 阅读(47) 评论(0) 推荐(0)
摘要:CF1552 A: 不多说了。。。 #include<bits/stdc++.h> using namespace std; int t; int a,b; int main() { cin>>t; while(t--){ cin>>a>>b; cout<<a*b<<endl; } return 0 阅读全文
posted @ 2021-08-19 19:51 Evitagen 阅读(51) 评论(0) 推荐(0)
摘要:CF1553 \(A\) , \(B\) 先不谈,我们先谈谈 \(C\) 的问题。 #\(C\) 状态# C: 本题数据很小,可以考虑状压枚举,从0000000000到1111111111挨个尝试。 如何判断至少比几局呢?可以利用贪心的思想,从左到右把分加给双方,对于每一个位置,如果一方剩下全赢对方 阅读全文
posted @ 2021-08-18 19:34 Evitagen 阅读(45) 评论(0) 推荐(0)
摘要:fhq Treap 引入: 平时的 \(treap\) 又长又需要旋转,而且不能求区间序列问题 因此我们用 \(fhqtreap\) 解决。 数组定义: int ch[MAXN][3];//0 左孩子,1右孩子 int val[MAXN];//每个点的权值 int rnd[MAXN];//每个点的随 阅读全文
posted @ 2021-08-16 19:58 Evitagen 阅读(58) 评论(0) 推荐(0)
摘要:二叉查找树 引入: 平衡树的基础就是二叉寻找树。 首先看一下这个二叉树: 假如说查询第 \(n\) 大的值,那么排序时间复杂度爆炸。 如果我们用上这棵树,就可以在 \(O(\log n)\) 的时间内查找,并且 \(O(\log n)\) 修改,\(O(1)\) 连边。 实现过程: 函数定义: st 阅读全文
posted @ 2021-08-11 19:42 Evitagen 阅读(158) 评论(0) 推荐(0)
摘要:四边形不等式 引入: 动态规划中,经常遇到形如下式的状态转移方程: \(m(i,j)=min {m(i,k-1),m(k,j)}+w(i,j)(i≤k≤j)(min也可以改为max)\) 上述的 \(m(i,j)\) 表示区间 \([i,j]\) 上的某个最优值。\(w(i,j)\) 表示在转移时需 阅读全文
posted @ 2021-08-10 20:45 Evitagen 阅读(187) 评论(0) 推荐(0)
摘要:分数规划: 定义: 给定整数 \(a_i,b_i\),规定 \(w_i=0/1\) ,存在一组解 \({w_i}\),使得 \(\displaystyle \frac{\sum_{i=1}^{n} a_iw_i}{\sum_{i=1}^{n} b_iw_i}\) 最大。 解决: 这颗式子可以转化成: 阅读全文
posted @ 2021-08-09 19:07 Evitagen 阅读(55) 评论(0) 推荐(0)
摘要:半平面交 定义: 半平面: 顾名思义,就是平面的一半。一条直线会把平面分成两部分,就是两个半平面。对于半平面,我们可以用直线方程式如:\(ax+by>=c\) 表示,更常用的是用直线表示。 半平面交: 顾名思义,就是多个半平面求交集。其结果可能是一个凸多边形、无穷平面、直线、线段、点等。 多边形的核 阅读全文
posted @ 2021-08-05 18:55 Evitagen 阅读(173) 评论(0) 推荐(0)
摘要:P3829 [SHOI2012]信用卡凸包 这题是个非常好的用来练手凸包的题目。 题意: 给定几个旋转后的顶点是半径为 \(r\) 的类似矩形,让你求出能包含所有矩形的多边形的边长。 解题思路: 一眼就是凸包问题,关键是怎么转换成正常的凸包。 我们从第三个样例开始分析: 首先可以做出来图: 然后进一 阅读全文
posted @ 2021-08-04 18:25 Evitagen 阅读(47) 评论(0) 推荐(0)
摘要:自适应辛普森法 引入: 对于计算一个非容易计算的多边形时,我们通常的想法就是在误差范围内将其划分成多个矩形,然后依次计算。 但是,如何划分这些矩形合适呢,这就是自适应辛普森法解决的问题。 方法: 简而言之,就是一种用二次函数来逼近被积函数。 把求原来函数的积分换成求二次函数的积分的一种近似求积分的方 阅读全文
posted @ 2021-08-03 16:03 Evitagen 阅读(603) 评论(0) 推荐(0)