ACM
ACM做的题目算法等
swust_fang
people should change
展开
-
欧拉函数,欧拉筛
对一个正整数N,欧拉函数是小于N且与N互质的数的个数.。φ(n) = n*(1-1/p1)*(1-1/p2)*......(1-1/pn) 其中(p1.....pn)为N的素因子ll oula(ll n)///单个数求欧拉{ ll ans=n,a=n; for(int i=2;i*i<=a;i++) { if(a%i==0) ...原创 2019-04-05 17:25:47 · 188 阅读 · 0 评论 -
矩阵快速幂+构造方法
与快速幂一样,可以将递推式通过二进制的方式来进行优化,这个学了快速幂就是十分容易理解大概的板子如下:struct mat///自己定义大小的矩阵{ ll m[11][11];};mat mulmat(mat A,mat B)///两个矩阵相乘{ mat C; memset(C.m,0,sizeof(C.m)); for(int i=0;i<n...原创 2019-05-14 10:21:42 · 401 阅读 · 1 评论 -
HDU 3306 Another kind of Fibonacci 矩阵快速幂
题目链接 因为S(N) , S(N) = A(0)^2 +A(1)^2+……+A(n)^2.所以构造的矩阵一定要维护A(n)^2 s[n-1]=s[n-2]+A[n-1]^2A[n]=x*A[n-1]+y*A[n-2]A[n]^2=x^2*A[n-1]+y^2*A[n-2]+2*x*y*A[n-1]*A[n-2]所以说还要维护A[n-1]*A[n-1]这个递推...原创 2019-05-14 12:44:17 · 147 阅读 · 0 评论 -
素数筛
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<set>#include<stack>#include<vector>#include<...原创 2019-04-20 10:54:06 · 86 阅读 · 0 评论 -
LightOJ - 1038 Race to 1 Again 基础期望概率 dp
传送门刚刚学习期望&概率我们设数X的期望改变次数为P[X]如果要求X的期望,很容易想到找x的因子;可以得到下式,cnt为X因子个数,ai为X的因子可以这么理解,当因子ai为1时,因为除于1不改变其期望值,上式上边分子部分为1+P[1]+P[x]不为1时,上部分为p[ai]+1,相当于把状态转换过去,并且期望次数加1分母为cnt,即为包括1和n的因子个数,因...原创 2019-07-18 20:04:44 · 163 阅读 · 0 评论 -
KMP-next数组
之前看的模模糊糊现在终于清楚了。主要是这一段代码的问题void getkmp(){ int k=-1,j=0; nex[0]=-1; while(j<m) { if(k==-1||b[j]==b[k]) { k++;j++; nex[j]=k; } ...原创 2019-03-10 11:23:46 · 194 阅读 · 3 评论 -
MUV LUV EXTRA 2019CCPC秦皇岛站J题 KMP
题目链接题意:意思给你俩数一个字符串,然后让你对字符串小数点后边的字符串进行处理,找个一个循环节以及对应出现的长度,然后用a*p-b*l算得到一个最大值那肯定循环节就想到了KMP了,然后循环长度根据样例他能从中间找一个循环节,但是都是循环到结尾的,那一下发现他其实是从后往前找的循环节,那这个题就非常简单了找出字符串反转一下,求KMP,从前到后枚举长度,next数组对应循环节长度...原创 2019-10-10 12:06:04 · 219 阅读 · 0 评论 -
HDU - 5875 2016 ACM/ICPC 大连网络赛 H题 暴力
题目链接题意:给你一个区间l,r一直将val[l]模上val[l+1],val[l+2]...val[r],因为一个模上比前一个数小数是没有意义的,所以需要将每一个点找到右边第一个小于他的点就行。ps:最坏的复杂度O(n^2),数据可能比较水吧那我就暴力找的:#include<stdio.h>#include<string.h>#include<...原创 2019-05-13 08:09:27 · 109 阅读 · 0 评论 -
Codeforces Round #359 (Div. 2) C. Robbers' watch 暴力枚举
题目链接题意是真的烦,到最后才知道是n个m其实就是限定表的两个时区的位数,所以所当数不够填满时区的时候前边自动补零思路:首先来说不能有重复的数字的话,小时和分钟的总位数大于7肯定不行。7的7次方也才823543所以说我们从把i从0枚举到n,j从0枚举到m即可。为什么复杂度是正确的?其实就是考虑LenN+LenM<=7且n*m的最大是的多少(Len表示位数有多少)考虑两...原创 2019-10-25 11:59:08 · 216 阅读 · 0 评论 -
P1160 队列安排 链表
题目链接因为有很多删除与插入的操作,所以用链表是最好的方法。一道基础的链表题,用stl自带的链表解决,第一次使用,记录迭代器下标还是第一次见到-。-#pragma comment (linker,"/STACK:102400000,102400000")#include<stdio.h>#include<string.h>#include<string...原创 2019-07-26 10:16:40 · 199 阅读 · 0 评论 -
洛谷P1110 报表统计 multiset stl好题
题目链接一开始自己想的是multiset维护顺序结构,然后查找所有的值差最小时候找加入的当前点的前驱以及后继,然后查找相邻两个的就用线段树维护一个差最小值~,但是后来发现是全局的,直接再开一个multiset维护相邻段之差就行了,但是set的话要删除,也挺费时间的,不是所有点相邻都往set里边装,比如在某一个段加一个点的时候他前一个点的差值直接用一个ans来储存最小,然后输出的时候差的set里...原创 2019-09-25 20:29:18 · 238 阅读 · 0 评论 -
Too Many Segments CF595D 贪心乱搞
传送门!比赛的时候没有时间写了,看看了看大佬的代码,学习学习。一开始实验室大佬说是用差分写的,但是看了代码发现打cf的人大家都是stl狂魔!贪心思路:区间按照左端点排序,从1~2e5遍历每一个点,不是遍历区间如果有以该点为起点的区间则加入set并用pair记录右端点以及区间下标(pair第一维为右端点,从小到大排序)当遍历到某一点的时候如果set的第一个及右端点最小的小于i就弹...原创 2019-10-25 12:40:45 · 249 阅读 · 0 评论 -
XOR and Favorite Number CF340E 莫队算法
题目链接题意:求给定询问区间[L,R]问有多少连续区间异或值等k,多次询问可以离线。a[i]^a[i+1]^a[i+2]^a[n]=(a[1]^a[2]^a[3]^...^a[i-1])^(a[1]^a[2]^a[3]^...^a[n-1]^a[n])所以可以转化为前缀异或和,问题就变为有多少对a[i]^a[j]=k;所以莫队算法的操作就明了。因为a^b=k则a^k=b,每次记录c...原创 2019-06-04 10:44:55 · 143 阅读 · 0 评论 -
洛谷 P2219修筑绿化带 二维单调队列~
题目链接:https://www.luogu.org/problem/P2219emmm调了一个上午+中午,fan题意:从N*M的中找到一个a*b的大矩形和减去a*b中的一个与之不重边界的c*d的小矩形和最大二维处理前缀和两次,分别是处理出以i,j为右下角的a*b矩形和A[i][j],以c*d矩形和B[i][j];然后我们以B[i][j]的每一行行进行单调队列维护一个j-b+d-...原创 2019-08-10 14:45:43 · 209 阅读 · 0 评论 -
【模板】树链剖分 P3384
题目链接//部分转自:https://www.luogu.org/problemnew/solution/P3384初学树链剖分,感觉这个模板题还是容易理解的,但是实在是码量很大的。知识点:重儿子:对于每一个非叶子节点,它的儿子中 儿子数量最多的那一个儿子 为该节点的重儿子 轻儿子:对于每一个非叶子节点,它的儿子中 非重儿子 的剩下所有儿子即为轻儿子 叶子节点没有重儿子也没有轻...原创 2019-10-13 15:41:18 · 127 阅读 · 0 评论 -
i++的认识
复习的时候遇到了一个有个关于运算符号以及优先级的问题int i=0;i=i++;给我看傻了,从c语言书上的解释i++意思就是先返回i的值,然后i再自增所以右边怎么都得等1吧,但实际上并不是这样的。实际上,不管是i++,还是++i都是i先自增只是++i先自增,返回自增后的值 i++先自增,返回自增前的值但是用i++代码来描述就是int temp=i;i=i+1;return temp;所以上述i=0;i=i++;解释:i=i++;(i自增变成1,...原创 2020-11-10 17:26:06 · 2947 阅读 · 0 评论 -
P2216 理想的正方形 单调队列 (二维)
题目链接:https://www.luogu.org/problem/P2216题意:求给定n*m的矩形中所有k*k的正方形块中最大值最小值之差(极差)最小哇,大神的思路真的很帅单调队列对每一行求一个k项最大最小用X[i][j]表示第i行小于j-k+1~j的最大值用X[i][j]表示第i行小于j-k+1~j的最大值然后处理完行之后,用X,x数组作为基础对每一列求最大最小,用...原创 2019-08-09 21:17:07 · 296 阅读 · 0 评论 -
奶牛排序 cow sort 置换群
链接:https://ac.nowcoder.com/acm/contest/924/H来源:牛客网题目描述农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动。因为脾气大的牛有可能会捣乱,JOHN想把牛按脾气的大小排序。每一头牛的脾气都是一个在1到100,000之间的整数并且没有两头牛的脾气值相同。在排序过程中,JOHN可以交换任意两头牛的位置。...原创 2019-06-18 22:42:48 · 397 阅读 · 0 评论 -
bitset 用法
#include<bits/stdc++.h>using namespace std; int main(){/********************重要操作*******************//* a.size() 返回大小(位数) a.count() 返回1的个数 a.any() 返回是否有1 a.no...原创 2019-08-08 19:18:17 · 206 阅读 · 0 评论 -
zoj-3228 Searching the String AC自动机
用一个val数组记录每一个单词结尾对应的位置,pos数组记录某个节点的深度(其实就是记录单词的长度的),然后用一个op数组记录一下每一个单词对应的询问方式,主要是查询分为了可重叠和不可重叠,不可重叠的话就是用一个last数组来记录查询过程中上次到达该单词的位置last[now]=i,如果再经过now点满足i-last[now]>=pos[now]就满足不重叠。#include<s...原创 2019-03-17 17:48:22 · 118 阅读 · 0 评论 -
HDU 3065病毒侵袭持续中 AC自动机
题意很明了,就是找每个匹配串在文本中出现的次数,并且根据题意可以可以有重复部分。所以这个题与板子不同的地方就是查找的一部分。还有就是多组输入!!!/* ┆ ┏┓ ┏┓ ┆ ┆┏┛┻━━━━━━┛┻┓ ┆ ┆┃ ┃ ┆ ┆┃ ━ ┃ ┆ ┆┃ ┳┛ ┗┳ ┃ ┆ ...原创 2019-03-15 17:14:31 · 197 阅读 · 0 评论 -
Keywords Search AC自动机QAQ
AC自动机,一直以来都以为是一个非常高大上的算法,其实它还真的挺高大上的。首先来说,ac自动机的思想与kmp类似,需要自己模拟来理解。给两个博客:http://www.cppblog.com/menjitianya/archive/2014/07/10/207604.htmlhttps://blog.csdn.net/KXL5180/article/details/88093307...原创 2019-03-14 19:32:52 · 364 阅读 · 3 评论 -
Equalizing Two Strings 冒泡排序or树状数组
首先考虑排序后相等如果排序后相等的话就只考虑reverse长度为2的,所以a或者b排序后存在相邻两个字母相等的话就puts YES,n>26也直接puts YES不然的话就假设c为a,b排完序的排列相当于判断经过多少次两两交换后a->c,b->c如果两者变换次数差值为偶数就puts YES,不然puts NO因为n>26的可以直接puts YES,所以把...原创 2019-11-05 12:35:41 · 185 阅读 · 0 评论 -
P2114 [NOI2014]起床困难综合症
题目链接做这个题一开始毫无思路,看了题解后才发现一个很巧妙的解法简而言之就是他是一道位运算的题,题目所示的三种操作都是位运算,他们就是某一位直接的运算都是独立的就我们假设答案二进制形式的某一位为0,那么他可能经过运算变成1或者不变若某一位为1,那么他可能经过运算变成0或者不变那么你肯定是想让他每一位都尽量的大,能为1的尽量都为1呗所以就是我们假设一个x=0(全0),一个...原创 2019-08-08 19:04:48 · 162 阅读 · 0 评论 -
2019南昌网络赛 C题,Hello 2019
题意:求包含9012,但是不包含8012的最小删除次数解题思路:首先将字符串反转,按照题解思路为线段树维护矩阵即可我们将线段树的每个区间用矩阵表示,矩阵mat[5][5]维护2019这个序列的情况~首先明确矩阵mat表示的意义:我们需要构成一个长度为4的序列mat[0][1]表示"2"所需要的最小花费值mat[0][2]表示"20"所需要的最小花费值mat[0][3]表示"...原创 2019-09-10 13:10:32 · 244 阅读 · 0 评论 -
Monitor CodeForces - 846D ——二维前缀和
Recently Luba bought a monitor. Monitor is a rectangular matrix of size n × m. But then she started to notice that some pixels cease to work properly. Luba thinks that the monitor will become broken...原创 2018-12-30 14:25:11 · 247 阅读 · 0 评论 -
Roundgod and Milk Tea 贪心
这个题好像可以用一种类似与置换的贪心方法来做~sum记为剩余奶茶,一开始sum等于奶茶和ans记录已经喝的奶茶数不用排序,我们就从前往后直接处理,考虑的是每一个班最多可以喝多少杯奶茶就是从剩余的奶茶里边减去本班的奶茶数(不让喝自己的)但是这时候我们贪心考虑之间已经喝的奶茶都是尽量优先喝的是该班但是这个时候你就能知道,本班这些人能喝多少杯奶茶了~#include<...原创 2019-08-14 21:29:30 · 252 阅读 · 0 评论 -
洛谷P2397 yyy loves Maths VI (mode) 摩尔投票
求众数的一种方法不需要内存,排序每次记录上次加的值以及个数,相等个数+1,不相等就-1因为众数大于一半 最坏的情况也就是拿一个众数取走一个非众数最后的结果肯定就是众数//#pragma comment (linker, "/STACK:102400000,102400000")#include<bits/stdc++.h>#include<stdio....原创 2019-08-08 19:42:19 · 192 阅读 · 0 评论 -
洛谷 P2468 粟粟的书架 二分(主席树+前缀和)
传送~:https://www.luogu.org/problem/P2468看了一下数据也发现是两道题,后边当他是一个序列(n==1)的时候直接主席树二分区间前k大和就行了但是有一个细节我觉得就是直接不去重的离散化会避免很多问题~所以直接按照最笨的方法排两次序然后按照顺序添加主席树查找就行。但是那50%的数据n!=1有点不知道怎么做了,一开始想到主席树肯定不行,然后二位前缀和也搞...原创 2019-08-13 09:37:48 · 209 阅读 · 0 评论 -
P3168 [CQOI2015]任务查询系统 差分+主席树
链接在这~:https://www.luogu.org/problem/P3168主席静态区间修改,单点查询区间(L,R)加1可以通过差分以后转换为L位置加1,R+1位置减1我们只需要记录一下,还是从左往右的这个顺序修改(在原来的主席树上再加一个值),但是可能在某一个点会出现加几次和减几次,对于一个root[i]可能会多次更新,如果这一点不是某个区间的左端点或者右端点+1,他就不会被更...原创 2019-08-14 09:18:49 · 184 阅读 · 0 评论 -
洛谷 P3302 [SDOI2013]森林 主席树+启发式合并
click here~:https://www.luogu.org/problem/P3302emmm这个题是真的烦 一看题发现这题不是count on a tree的升级版么如果一点思路没有的话还是先做那个题比较好这个题多了一个条件就是说,你在查询过程中需要连边,仔细一样脑海里并没有任何解题思路emmm,什么lct根本就不会这道题其实是用了个启发式合并何谓启发式合并呢,我看了...原创 2019-08-13 14:40:31 · 165 阅读 · 0 评论 -
P2396 yyy loves Maths VII 状压dp 变态卡常
很容易想到dp,但是1<<24都有1600w的复杂度,要是普通做法肯定T掉共有maxs=(1<<n)-1种情况首先f[ ]记录某种情况的方案数,dis[ ]记录某种情况的步数和然后每次到dis[i]=厄运值就不更新解决卡常的方法正常做法:2^(n+1) 肯定会T改成 :2^nlogn O2优化过了 恶心心f[i]=去掉i中某一个1的所有情况f[...原创 2019-08-08 19:15:06 · 180 阅读 · 0 评论 -
POJ - 1661 Help Jimmy DP
题目链接题意:题意很明了,就是求从最高点最短多长时间到达地面,从板上的移动与空中下落的速度都是1;做法:我们首先将所有的板子与起点按照,左、右端点,高度存起来,按照高度升序。然后dp,设dp[i][0]是从某一块板子左端点到地面的最短距离 dp[i][1]是从某一块板子右端点到地面的最短距离设上边那块板子为i,下边为j如果两块板子之间的高...原创 2019-07-12 16:28:20 · 177 阅读 · 0 评论 -
Invoker 2019CCPC秦皇岛站I题 简单DP
题目链接每个技能有6中组合,上一个技能也有6种组合,所以从该状态6种分别从上种的6种转移过来取最小值即可。不读题的话可能就看成两种状态了(hhss表示当前状态,s[k]表示上个状态,check函数表示状态转移所需dp[i][j]=min(dp[i-1][k]+check(s[k],ss),dp[i][j])代码://#pragma comment (linker, "/S...原创 2019-10-10 11:20:25 · 269 阅读 · 0 评论 -
不要62 ---数位DP
题意:求m到n中不含62和4的数的个数。题目链接思路:数位dp模板求满足的数字或不满足的数字,刚学,就求不满足的数。#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<vector>using namesp...原创 2019-01-07 20:04:20 · 115 阅读 · 0 评论 -
POJ - 3186 Treats for the Cows DP
传送门乍一看与cf的某道题很相似,做了半天的贪心,然后是个二维dp。这道题难的点在于你无法从最先取的值推到最后取的值,只能从内往外推。如果能看出来这点,其实就不难,但是很难想。一开始dp[i][i]记录以该点为最后取的数,然后将长度dp到2,3~n.k为长度,i,j为左右端点,判断将左右端点那个先后拿。递推式 dp[i][j]=max(dp[i][j-1]+(n-k)*a[j]...原创 2019-07-14 14:32:53 · 128 阅读 · 0 评论 -
洛谷P1896 [SCOI2005]互不侵犯 状压dp+位运算
题目链接:https://www.luogu.org/problem/P1896题意:n*n的格子填数,每个数填放位置的周围(8个)不能有其他的数n<=9 ,矩形状压 f[i][j][s],f[i][j][s]就表示在只考虑前i行时,在前i行(包括第i行)有且仅有s个国王,且第i行国王的情况是编号为j的状态时情况的总数。状态转移方程 f[i][j][[s]=sum(f[i-1][...原创 2019-08-09 10:49:17 · 177 阅读 · 0 评论 -
E:By Elevator or Stairs? CF595 DP&最短路
题目链接比赛的时候一看,这不是最短路吗,然后敲了一个最短路。然后比赛完发现大家基本都写的dp,我真是个憨憨,dp3行最短路就建个简单的图,dp就是从上一维转化过来就是了优秀的dp://#pragma comment (linker, "/STACK:102400000,102400000")#include<bits/stdc++.h>#include<...原创 2019-10-25 12:21:51 · 211 阅读 · 0 评论 -
HDU - 3183 A Magic Lamp 线段树
题目链接题意:数字字符串删除k个值后的数字最小不算前导0思路:其实就是最小字典序,那么我们肯定一位一位的确定最小的值,那么对于i位,其实找i+1~i+k位中最小的数有没有比当前位置的数小,如果有的话就是把中间的都删掉。所以其实就是求某一位i右边i+1~i+1+k中最小值的最小下标,我们可以用线段树来维护。哈哈哈~问了问学长,学长骂我智障(hh其实就是线段树维护个node,重载一下就行~...原创 2019-09-27 17:13:28 · 138 阅读 · 0 评论 -
HYSBZ - 1798 Seq 维护序列seq 线段树lazy标记
传送门这道题属实是线段树的道比刷题,又加又乘的,当然还可能会有乘除,阶乘等等可能的情况。对于这道题,主要的一个就是怎么记录lazy标记,首先的话一个数组是肯定不行的,设乘的为lazy,加的为add。每次我们更新时,要用lazy数组去更新add数组。关键是pushdown的时候注意一下,下放的时候比较复杂。代码如下:#include<stdio.h>#incl...原创 2019-03-07 14:50:05 · 152 阅读 · 0 评论