HDU
给我一瓶AC钙
是一颗萌菜没错了
展开
-
我的ACM之旅
仅以此来记录我短暂的ACM时光从一个蒟蒻成长为一只年龄更大的蒟蒻写在自己blog了,欢迎来踩原创 2021-01-08 16:14:54 · 160 阅读 · 0 评论 -
(2019杭电多校3) Distribution of books (dp+离散化+线段树)
传送门题意:n个数,可以选择前m(m自定)个数分成k块,问每块的数字和的最大值最小是多少解:首先我们可以二分这个最小的最大值mid,然后去check,我们可以定义dp[i],前i本书在满足<=mid的情况下最多可以分成几块,那么当sum[i]<=mid的情况下,dp[i]=1,反之0;更新的话dp[i]=max(dp[i],dp[i]+1) (当sum[i]-sum[j]<...原创 2019-09-17 15:44:24 · 275 阅读 · 0 评论 -
(CCPC) 网络赛 1004 path (思维)
传送门题意:给你有向图,每次查询第k长的路径,而且这里面环状路径可以无限走。解:被次大最短路,或者第k大最短路的思想所限制了,题解的思路就很简单了,被按在地上摩擦,就是用优先队列按照距离从小到大排序,把一个点取出时,可能加进去的答案就是当前这个节点连出去的边最短的那一条(点出去的边也需要排序),或者上一个节点还可以延展出去的路径。在将查询排序一下,就可以了。#include<b...原创 2019-08-24 16:17:56 · 246 阅读 · 0 评论 -
(CCPC) 网络赛 1002 array (线段树剪枝)
传送门题意:给你一个序列,每次查询【1,r】>=k 最小的没有出现的ai值。解:就是一颗权值线段树,同时节点用ls维护他代表区间所有值出现位置的最大值,没有出现(或修改)都置成无穷大,查询的时候,走左右儿子根据k来,满足条件优先进入左儿子,但是要判断一下ls(lson)是否>r,如果小于r,那说明所有值都在小于r的区间出现了,就没必要进入。然后递归到叶子节点,出现的位置>r,那就说明...原创 2019-08-24 12:40:29 · 243 阅读 · 0 评论 -
(HDU) 6534 Chika and Friendly Pairs (莫队+树状数组)
传送门题意:给你一个数组,对于第i个数来说,如果存在一个位置j,使得j>i并且a[j]-k<=a[i]<=a[j]+k,那么这对数就称为好的,有q个询问,问你l到r区间有多少对好的数。思路:这题卡常数卡的好厉害呀,比赛时是用主席树+莫队写的gg,主席数常数太大了,用树状数组和莫队维护,同时先把a[i],a[i]-k,a[i]+k先全部离散好了。#includ...原创 2019-05-27 21:13:53 · 197 阅读 · 0 评论 -
(HDU) 6191 Query on A Tree (可持久化字典树+dfs序)
传送门题意:给你一颗树,每个点都有取值,q次查询,一个u,一个x,求以u为根的树的一个节点与x异或的最大值。思路:题目给了10000ms,暴力啊,失败了。这题需要用可持久化字典树,如果你不知道你可以先做一下这道题,这时候我们如果知道以u为根的树的起始root和最后root,那我们不就可以直接query嘛,这个我们只要在dfs的时候用个in数组和out数组来记录u的初始节点和结束节点就可以了...原创 2019-05-18 17:56:05 · 185 阅读 · 0 评论 -
(HDU) 6188 G - Duizi and Shunzi (贪心)
传送门题意:给你一串序列,两个一样的是对子,连续的三个是顺子,求顺子个数和对子个数的最大值。思路:从小到大贪心,先看自己能组成的对子有多少个,如果最后还余了1,那就考虑顺子,假设当前数为x,但这里的条件是num[x+1]%2==1 && num[x+2] ,就是能不用后面的就不用后面的,因为后面的数可能还会对后面的组合造成贡献。#include<bits/st...原创 2019-05-17 21:57:48 · 249 阅读 · 2 评论 -
(HDU) 6185 Covering (矩阵快速幂)
传送门题意:给你一个4*n的矩阵,然后用1*2和2*1的砖去把他铺满,求方案数。解题思路:这个无疑是推出一个递推式,但是由于n很大,所以必须要用矩阵快速幂,但是菜啊,不是多算就是少算了,这个大哥图文解说,还是自己的思维太差了啊。#include<bits/stdc++.h>#define il inline#define pb push_back#define f...原创 2019-05-17 21:06:19 · 247 阅读 · 0 评论 -
(HDU) 6186 CS Course (线段树)
传送门题意:给你n个数,p次操作,每次一个x,除去Ax,然后求出这个序列的与,或,异或的值。解题思路:只要用线段树维护一个数的状态就行了,是否被抛弃,重写一下pushup。#include<bits/stdc++.h>#define il inline#define pb push_back#define fi first#define se second...原创 2019-05-17 20:59:13 · 120 阅读 · 0 评论 -
容斥定理模板 HDU 4135 Co-prime
传送门:解决[x,y]区间与n互质的数的个数->总个数-不互质(能被n素因子整除的数)#include<bits/stdc++.h>#define il inline#define pb push_back#define fi first#define se second#define ms(_data,v) memset(_data,v,sizeof(_...原创 2019-05-09 21:00:35 · 167 阅读 · 0 评论 -
(HDU) 1565 方格取数(1) (状压dp)
传送门解题思路:dp[i][j]代表到第i行的第j个状态所能得到的最大的和,可以先处理一行没有两个相邻的满足条件的状态。然后把每行每个状态的和都算出来,状态转移的条件是当前这行第j个状态与上一行的第k个状态想与为0,即没有相邻的,那就能更新dp[i][j]:dp[i][j]=max(dp[i][j],dp[i-1][k]+sum[i][j]);还有一个就是n为20的最大情况数,不能直接1<...原创 2019-04-12 14:55:38 · 190 阅读 · 0 评论 -
(HDU) 1247 Hat's Words (字典树)
传送门题目大意:给你字符串,输出其中能由其他两个字符串组合而成的字符串。解题思路:建立两颗字典树,一颗正序,一颗反序,开一个vis数组,find的时候正序find一下,如果字符串的第i位有其他字符串flag标记,就vis[i]++,反序find的时候,同样不过是vis[len-i-2]++,标记正序的位置-1,最后从0~len-1,搜一遍,看有没有位置vis[i]>=2,有的话就说明...原创 2019-01-29 14:36:16 · 161 阅读 · 0 评论 -
HDU 6148 Valley Numer
写了多天一直被打断的数位dp,终于写完了(丧)#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=105;const ll mod=1000000007;ll f[maxn][15][5],T;ll lim[maxn];//f[i][j][k] 代表i位前驱位...原创 2018-10-29 15:59:50 · 132 阅读 · 0 评论 -
HDU 1356 The Balance && POJ2142
重新复习了一遍扩展欧几里德(一开始学的都忘了,丧http://acm.hdu.edu.cn/showproblem.php?pid=1356这道题一眼就可以看出来是扩展欧几里德,但是将答案解出来了之后,还要找到符合他条件的答案,这样算出来的答案已经是符合条件1了,条件2是(x+y)最小,条件3是(ax+by)最小算出来的x,y有正有负,正即放在天平左边,负即和物品放在天平右边 ...原创 2018-11-11 15:02:26 · 259 阅读 · 0 评论 -
HDU 4704 Sum(隔板+费马小定理)
传送门 题意:输入一个N,将N拆分成1-n个数,问有多少种组成方法。思路:可以用隔板法考虑这个问题,有N个1,就有N-1个空隙,如果是拆分成1个数,那就是放0块隔板即C(N-1,0) (emmm不会打数学式子 ) 2个数字那就是C(N-1,1),以此类推到C(N-1,N-1);那要计算得结果就是 2^(N-1),但由于这个N有100000位,直接快速幂是不可能的,这时候就需要这道题...原创 2018-12-02 14:00:54 · 163 阅读 · 0 评论 -
HDU 5750 Dertouzos(数论)
传送门题意:在小于n的范围内,找出所有最大除数为d的数。思路:假设存在一个y满足题目条件,即y=k*d,那么我们可以分析出来 k一定为质数,而且k<=d,因为只有这样k才不能分解成两个大于1的数,如果一旦分成两个大于1的数a,b;那么a*d也是y的因子而且比d大了。既然这样的话,我们就可以通过素数筛预处理素数。枚举每一个素数和d的乘积是否满足,那何时终止呢?(素数存入V数组1...原创 2018-12-02 15:32:34 · 231 阅读 · 1 评论 -
HDU 3037 Saving Beans(隔板+组合数+lucas)
传送门题意:相当于n个数的和不超过m的方案数。思路:我们先考虑n个数和等于m的情况,即x1+x2+.......xn=m(允许xi为0)有多少种可能,我们可以想到隔板法,但由于允许0的出现,我们可以用1代表果子,有m个1,在加上n-1个0代表空,然后用n-1块隔板将其分成n份。即C(m+n-1,n-1),又C(m+n-1,n-1)=C(m+n-1,m),这代表着和为m的方案数。那我们可...原创 2018-12-02 17:11:10 · 173 阅读 · 0 评论