
template
文章平均质量分 63
JXNU_SONG
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ __builtin_函数
此类函数接收的数在 unsigned int所能表示的范围内即可1__builtin_ffs(x)返回 xxx 中最低位的 111 是第几位(从低位往高位数,且从 111 开始数)2__builtin_clz(x)返回 xxx 二进制中前导零个数(以无符号 intintint 为准,即总共 323232 位)3__builtin_ctz(x)返回 xxx 二进制中末尾 000 的个数( x≠0x\neq 0x=0 )4__builtin_popcount(x)返回 xxx原创 2022-04-29 16:40:11 · 1659 阅读 · 0 评论 -
AtCoder Beginner Contest 246 F - typewriter(容斥原理)
F - typewriterhttps://atcoder.jp/contests/abc246/tasks/abc246_f首先我们根据容斥原理公式:(摘自百度百科):∣A1∪A2∪...∪Am∣=|A_1\cup A_2\cup...\cup A_m|=∣A1∪A2∪...∪Am∣=∑1≤i≤m∣Ai∣−∑1≤i≤j≤m∣Ai∩Aj∣+∑1≤i≤j≤k≤m∣Ai∩Aj∩Ak∣−...+(−1)m−1∣A1∩A2∩...∩Am∣\sum\limits_{1\leq i\leq m}|A原创 2022-04-04 10:42:54 · 1012 阅读 · 0 评论 -
Codeforces Round #214 (Div. 2) C. Dima and Salad(带负权的01背包)
Dima and Salad这题我们要选出 ∑mj=1aj∑mj=1bj=k\frac{\sum\limits^{j=1}_{m}a_j}{\sum\limits^{j=1}_{m}b_j}=km∑j=1bjm∑j=1aj=k ,实际上就是选出 ∑mj=1aj−k∑mj=1bj=0\sum\limits^{j=1}_{m}a_j - k\sum\limits^{j=1}_{m}b_j=0m∑j=1aj−km∑j=1bj=0 ,那么我们另 ci=ai−kbic_i=a_i-kb_ici.原创 2021-12-08 20:44:49 · 819 阅读 · 1 评论 -
CROC-MBTU 2012, Elimination Round (ACM-ICPC) H. Queries for Number of Palindromes
Queries for Number of Palindromes我们可以设 dp[l][r]dp[l][r]dp[l][r] 为 [l,r][l,r][l,r] 中 的答案。那么我们可以找到转移方程:dp[l][r]=dp[l+1][r]+dp[l][r−1]−dp[l+1][r−1]+check(l,r)(判断整个[l,r]是不是回文串)dp[l][r] = dp[l+1][r]+dp[l][r-1]-dp[l+1][r-1]+check(l,r) (判断整个[l,r]是不是回文串)dp[l.原创 2021-11-29 21:47:34 · 248 阅读 · 0 评论 -
AtCoder Beginner Contest 227 G - Divisors of Binomial Coefficient (埃筛分解较大数)
G - Divisors of Binomial CoefficientLink题目大意:计算组合数 CnkC^k_nCnk 的约数个数。 1≤k≤1e6,1≤n≤1e121≤k≤1e6,1≤n≤1e121≤k≤1e6,1≤n≤1e12,且保证 k≤nk≤nk≤n首先可见约数个数定理然后我们有: Cnk=n×(n−1)×(n−2)×...(n−k+1)1×2×3×....×kC_n^k=\frac{n×(n-1)×(n-2)×...(n-k+1)}{1×2×3×....×k}Cnk=1×2×.原创 2021-11-20 17:31:24 · 632 阅读 · 0 评论 -
KEYENCE Programming Contest 2021 (AtCoder Beginner Contest 227) D - Project Planning(二分+贪心)
Project Planning题目大意:现给出一个序列 aia_iai ,代表第 iii 种球有多少个。现在认为一个桶内只能放不同种类的球,再给出桶的容量 kkk ,现在问最多能放满几个桶。这题的答案显然有二分性,我们可以二分答案解决,本题的关键就在于 checkcheckcheck 答案。二分之后我们一定要用到我们二分出来的信息,也就是桶的个数,如果不考虑桶的个数,那么就还是会和没二分一样,不知如何快速分配。那么我们现在得到了桶的数量 xxx ,我们可以考虑一下 ai≥xa_i≥xai≥x.原创 2021-11-17 20:23:31 · 438 阅读 · 0 评论 -
2021辽宁省大学生程序设计竞赛 H 制造游戏币(思维,背包)
H 制造游戏币https://ac.nowcoder.com/acm/contest/22842/H]我们首先根据每个限制的 bbb 和 ccc 都不相同可以得到,他们的关系一定是一条链。那么我们可以对链做一些预处理即可解决这个问题。一条链上要求拿的物品个数要递增,那么,我们首先把至少要拿的拿掉,也就是分别拿 0,1,2,3...0,1,2,3...0,1,2,3... 然后,我们可以这么想,拿一个 xxx 就至少要拿一个 xxx 的整个后缀,因为这样才能至少保持递增,那么我们可以将 xxx 的后缀当.原创 2021-10-29 16:36:08 · 738 阅读 · 2 评论 -
HDU 4027 Can you answer these queries?(快速下降区间修改)
Can you answer these queries?原题链接题意:给一个有 nnn 个元素的序列, mmm 个操作,区间开根,区间求和。区间开根我们没办法在线段树上用区间操作求解,但是单点可以,但是我们要让这个过程加速。我们可以维护一个标记 keepkeepkeep ,用来表示这个区间内是否所有元素开根后的值都不会再变化,那么区间更新的时候碰到这样的区间我们就可以直接返回不用再找下去了。因为是单点更新,某个点的 keepkeepkeep 标记状态我们是可直接判断得到的,我们只要在 pushupp原创 2021-08-26 19:25:36 · 114 阅读 · 0 评论 -
基础高斯消元模板
基础高斯消元模板基础的高斯消元模板就是个模拟,就是在模拟手算,将一个增广矩阵变成一个阶梯型矩阵,然后变换完之后即可得到秩,然后根据秩的大小我们就可以知道有没有唯一解,如果有唯一解就不断的回带,最终得到这组唯一解。这些都是线代的知识,学习这个模板前把相关的线代知识学透再来学这个模板真的就会非常清晰,或者说最好是先理解透线代的有关于高斯消元的知识再来学习这个模板,而不是从这个模板种学习高斯消元。 模板题链接#include <bits/stdc++.h>using namespace s原创 2021-08-10 19:18:07 · 153 阅读 · 0 评论 -
万恶的柯怡(可持久化lazy模板)
万恶的柯怡题目链接题意就是一个在线的区间修改区间求和。但是依数据范围看,如果我们想用线段树解决这个问题就得用动态开点的线段树,那么这里涉及到区间修改,需要使用 lazylazylazy 标记,但是如果是动态开点,又有 push_downpush\_downpush_down 的话,就可能得在 push_downpush\_downpush_down 中开点,这样可能空间复杂度不好把控,所以我们就有了可持久化的 lazylazylazy 。我觉得看代码更加好理解。如下,我们可以把落到这个区间的更新数据.原创 2021-07-30 12:59:01 · 124 阅读 · 0 评论 -
Maximal submatrix(直方图最大矩阵)
Maximal submatrix 原题链接先预处理出每个点的高度,对于每一行而言就是一个直方图。然后利用单调栈对于每一行求出面积最大的矩阵,其实就和最大面积全 111 矩阵问题是一样的。原理都是,对于一个直方图而言,其面积最大的矩阵的高度一定会卡在某个横坐标的上限,不然的话一定会有面积更大的矩阵,也就是不然高度一定可以往上涨。基于这个原理,我们就去遍历横坐标,假设高度上限在这,然后计算出向左向右最多能扩张到哪里,这里就要利用单调栈了。然后最后对于每个横坐标我们都求出了以此为上限的最大可能面积,答案就.原创 2021-07-21 19:41:27 · 422 阅读 · 0 评论 -
樱花(混合背包模板)
樱花 原题链接给定物品权值,重量,和可使用的个数,且某些物品有可能可无限使用,在这种条件下求解背包问题。即 dpdpdp 的时候分两种情况,如果是可以取无限的情况,那么针对这种物品,第二重循环我们采用无限背包的方式。如果是有限个,那么将其进行二进制拆解(具体拆解方式见代码,证明略),然后将每个拆解的部分当作一个 010101 背包进行第二重循环,最终即可得到答案。#include <bits/stdc++.h>using namespace std;typedef long .原创 2021-07-19 10:23:10 · 159 阅读 · 0 评论 -
运输计划(二分,树上差分)
运输计划 题目链接题目大意:给出一颗有 nnn 个点的树,和走完某条边的耗时。现有 mmm 个从点 uuu 到点 vvv 的需求,且我们可以把某一条边的耗时变成 000 ,问最短的最长耗时是多少。我们可以考虑二分答案,那问题就是我们怎样进行 checkcheckcheck 。我们先把路径长度超过 midmidmid 的需求记录下来,然后我们就是要找到一条边,被所有这些超时的需求的路径经过,且这个边尽可能长。为什么要找到所有超时需求都经过的边呢?因为如果我们找到的边不是所有超时需求(不满足 >m.原创 2021-07-10 17:15:35 · 263 阅读 · 0 评论 -
主席树初探
主席树主席树初始的初级应用也就是 这个,前置知识:权值线段树,前缀和首先我们对序列进行离散化,将 nnn 个元素的数组排过序后离散化为 [1,n][1,n][1,n]然后我们考虑建立 nnn 棵权值线段树,第 iii 棵表示用下标为 [1,i][1,i][1,i] 的元素建立的权值线段树。这里有一点对理解比较有帮助,就是每棵树的逻辑结构都是相同的,因为根的范围都表示的是 [1,n][1,n][1,n] (这个是值的范围,不是下标范围,因为这是一颗权值线段树,而且我们一开始将所有数字离散化为 [1,n原创 2021-07-09 16:14:16 · 121 阅读 · 0 评论 -
小阳的贝壳(区间gcd)
小阳的贝壳题目描述小阳手中一共有 nnn 个贝壳,每个贝壳都有颜色,且初始第 iii 个贝壳的颜色为 colicol_icoli 。现在小阳有 3 种操作:1 l r x:给 [l,r] 区间里所有贝壳的颜色值加上 x 。2 l r:询问 [l,r] 区间里所有相邻贝壳颜色值的差(取绝对值)的最大值(若 l = r 输出 0)。3 l r :询问 [l,r] 区间里所有贝壳颜色值的最大公约数。题目解答如果不带修,那么求区间的 gcdgcdgcd ,只用线段树就可以解决。但是这里我们发现很难用原创 2021-07-07 17:25:00 · 215 阅读 · 0 评论 -
I. Rise of the Robots(最小圆覆盖)
I. Rise of the Robots题目链接题目大意:在一个以 (0,0)(0, 0)(0,0) 为圆心 RRR 为半径的圆桌上要举行一场比赛,一个圆形机器人自身半径为 rrr ,他有 nnn 步行动,起点未知,给出每一步的 (dx,dy)(d_x, d_y)(dx,dy) ,设机器人当前在 (x,y)(x, y)(x,y) ,则下一步行动走到的点为 (x+dx,y+dy)(x + d_x, y + d_y)(x+dx,y+dy) ,现在问将起点设在哪里可以保证这个机器人在行动的全程自身边原创 2021-05-02 20:17:30 · 128 阅读 · 0 评论 -
货舱选址问题
货舱选址问题例题链接在一条数轴上有 nnn 家商店,它们的坐标分别为 a1− aNa_1- ~a_Na1− aN 。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。那么先假设这个仓库地址地址在 xxx 处,此时的距离和为:∣a1−x∣+∣a2−x∣+...+∣an−x∣\vert a_1-x \vert + \vert a_2 -x \vert + ...+ \vert a_n原创 2021-02-21 18:26:01 · 545 阅读 · 0 评论 -
链式前向星模板
链式前向星模板功能 :存图理解 :tot表示的是第几条边,to数组代表了第几条边的去向是几号结点,nt数组记录了对于此时起点为u的一条边来说,上一次输入进来的起点为u的节点的编号,head数组表示最后一条起点为u的边的编号。这样的话就可轻松访问对于以u为起点的所有边。缘由:对于一个起点u,可以直接用head[u]访问到最后一次输入的起点为u的边,然后nt必然记录了每条边的上一次输入的边的编号(满足两条边的起点同为u),然后就可以寻找到上一条起点为u的边,不断的找下去,因为对于第一次输入的起点为u的边来说原创 2020-11-25 18:57:21 · 500 阅读 · 1 评论 -
二维前缀和
二维前缀和问题引出:假如现在给出一个n*m的二维数组,现给出(x1,y1),(x2,y2),如何O(1)求出以(x1,y1),(x2,y2)为对角线的矩阵内元素的和?这时候就要用到二位前缀和。二位前缀和思路:DP(同一维前缀和相同);现设sum[i][j] 代表以(1,1),(i,j)为对角线的矩阵内元素的和,a[i][j]为单个元素的值。那么我们如何通过DP求出来呢,如下图,我们可以写出一个DP式:sum[i][j] = sum[i-1][j] + sum[i][j-1] - sum[i-1][j原创 2020-09-30 00:41:04 · 244 阅读 · 2 评论 -
扩展BSGS
扩展BSGS扩展BSGS用于解决下列方程,且对于a,c是否互质没有要求ax≡b(modc)a^x \equiv b \pmod cax≡b(modc)以下是洛谷4195(【模板】扩展BSGS)的代码相应的例题还有HDU2815,都是扩展BSGS的裸题#include <iostream>#include <cstdio>#include <map>#include <cmath>#include <algorithm>usi原创 2020-09-03 16:38:24 · 207 阅读 · 1 评论 -
欧拉素数筛理解与模板
模板:const int N=1000001;int primes[N], cnt;bool st[N];void getPrimes(int n){ memset(st, false, sizeof st); cnt=0; for(int i=2; i<=n; i++) { if(!st[i]) primes[cnt++]=i; for(int j=0; j<cnt && i*pr原创 2020-08-25 16:00:59 · 338 阅读 · 2 评论 -
字符串哈希
自然溢出法(结果自动mod264-1):unsigned long long Hash[n]hash[i]=hash[i−1]∗p+idx(s[i]);idx(s[i])为字母s[i]线性对应的某个数字单哈希:hash[i]=(hash[i−1])∗p+idx(s[i])%mod;p和mod均为素数且p<mod一般令hash[0]=1若已知一个|S|=n的字符串的hash值,hash[i],1≤i≤n,其子串sl…sr,1≤l≤r≤n,对应的hash值为:hash=((hash[r原创 2020-07-22 11:32:32 · 173 阅读 · 0 评论 -
单调队列与滑动窗口
以下记录了对于单调队列和滑动窗口关系的理解过程,有错误请指正什么是单调队列呢:直接上例子理解吧。对于一个序列{3,1,4,6,2,7},现在我们来看一个个元素加入一个单调递增队列中的变化情况:加入1号元素:此时队列空,直接加入。{1}(注意存的是下标)加入2号元素:2号元素为1,比队尾的一号元素小,1号元素出队,此时队列为空,不能再比较,2号元素入队{2}加入3号元素:3号元素为4,比队尾的2号元素大,直接放尾部。{2,3}加入4号元素:理由同上。{2,3,4}加入5号元素:5号元素比队尾的4原创 2020-07-16 15:10:54 · 414 阅读 · 1 评论 -
DINIC模板
struct edge{int to,cap,rev;};vector<edge> G[MAX_N];int level[MAX_N];int iter[MAX_N];void add_edge(int from,int to,int cap){ G[from].push_back( (edge){to,cap,G[to].size()} ); G[to].push_back( (edge) {from,0,G[from].size()-1});}void bfs(int原创 2020-07-14 17:00:53 · 157 阅读 · 1 评论 -
BITSET操作
BITSETbitset < N > a (M)其中a为变量名。N表示该类型在内存中占的位数,是二进制。M表示变量a的初始值。原创 2020-07-13 21:18:13 · 187 阅读 · 0 评论 -
Binary Indexed Tree基础
BIT树BIT树,也称树状数组,是能够完成下述操作的数据结构:给一个初始值全为零的数列,a1,a2……an(1) 给定i,计算a1+a2+……ai(2) 给定i和x,执行ai+=x算出对应编码最低位第一个非零值的权值的为公式:i&(-i),原理:基于补码,因为负数的补码就是最高位填写符号位后除符号位所有位都按位取反再加一,那么此时,最低位第一个非零元素的右边原本肯定都是零,取反后就都是一,再加一就会不断进位直至取反后第一个为0的地方停止进位,那这个位置也就是原本最低位第一个为1的位置,这原创 2020-06-03 01:22:04 · 283 阅读 · 0 评论 -
01背包与完全背包的基本与优化
01背包的基本与优化基本DP[i][j]数组的含义:从前i个物品挑选物品放入容量为j的背包中可获取的最大价值。那么现在就考虑递推式,首先对于所有放法,无非两种情况,放第i个物品和不放第i个物品,比较两个哪个价值更大就行了。首先如果根本就放不了第i个物品,也就是第i个物品的重量直接超过了j,那么此时就只能不放i了,那么此时的值就直接等于DP[i-1][j]。如果能放,一个值就是刚才的DP[i-...原创 2020-04-27 00:45:34 · 318 阅读 · 0 评论 -
快速幂(详解位运算法)和矩阵快速幂
1.基本快速幂幂运算an即n个a相乘。快速幂就是高效的算出an,当n很大的时候,写题的话基本就超时了。当然基本的快速幂也不只一种方法,下面介绍一种用位运算实现的方法:0首先,就是要把n看成二进制,例如计算a11,实则就是计算a(1101)B,也就是最终可以转化为a(8+2+1)即是a8×a2×a1。如下图那么显然,用位运算去遍历n的每一位(遍历n的每一位只要用n和1 做与运算,再每一将n右...原创 2020-03-29 20:48:45 · 889 阅读 · 0 评论 -
HDU 2068:RPG的错排(错排问题)
HDU 2068:RPG的错排题目链接Problem Description今年暑假杭电ACM集训队第一次组成女生队,其中有一队叫RPG,但做为集训队成员之一的野骆驼竟然不知道RPG三个人具体是谁谁。RPG给他机会让他猜猜,第一次猜:R是公主,P是草儿,G是月野兔;第二次猜:R是草儿,P是月野兔,G是公主;第三次猜:R是草儿,P是公主,G是月野兔;…可怜的野骆驼第六次终于把RPG分清楚了。由...原创 2020-02-12 21:57:21 · 400 阅读 · 0 评论 -
2021牛客暑期多校训练营4 J Average(区间最大均值)
J Average原题链接我们把矩阵均值用 aia_iai 和 bib_ibi 表示然后去化简发现就是分别求 aaa 序列和 bbb 序列的区间最大均值。那么现在我们就想求一个序列的区间最大均值。我们用二分去解决这个问题,我们去 checkcheckcheck 能否有区间达到均值 CCC那么也就是存在: (al+al+1+....+ar−1+ar)/L≥C(a_l+a_{l+1}+....+a_{r-1}+a_r)/L≥C(al+al+1+....+ar−1+ar)/L≥C即存在:.原创 2021-08-27 14:05:51 · 262 阅读 · 0 评论