HDU
文章平均质量分 64
orz11111111
这个作者很懒,什么都没留下…
展开
-
HDU 6395 Sequence 矩阵幂,下取整,分段
题意:F[1]=A,F[2]=B, F[i]=C*F[i-2]+D*F[i-1]+[p/i]1<=P,n<=1e9. 求出第n项的值.[p/i]随i不同而变化, 如果没有这一项或者这一项是一个常数的话,显然就可以用矩阵幂来推.[p/i]下取整的值最多只有2*sqrt(p)项. (i<sqrt(p)显然结果最多sqrt(p)项, i>=sqrt(p) 结果最大为s...原创 2018-10-26 17:26:59 · 242 阅读 · 0 评论 -
HDU 5587 Array 规律+递归
HDU 5587题意:初始序列a为{1},操作:在序列a末尾添加一个0之后,复制一遍0前面的数 然后将0之后的数+1(包括0).现在对序列a重复操作100次.Q次询问 每次询问一个m 求出序列a前m个数之和, Q初始长度为1 每次操作后序列长度*2+1 len[i]=2^i(i+1) -1容易知道第i次操作后 序列的和为 s[i]=2*s[i-1]+len[i-1] 第i次原创 2017-11-11 10:19:36 · 179 阅读 · 0 评论 -
HDU 5230 ZCC loves hacking DP(拆分数,加数不同)
HDU 5230题意:给出n,L,R 问[1,2...n-1]中和为[L,R]的方案数.每个数只能选一次. n,L,R求L每个加数都不同 . (1+2+..i)dp[i][j] 把j拆分成i个不同加数的方法数.i个加数中有一个是1,i个加数一个1都没有dp[i][j]=dp[i-1][j-i]+dp[i][j-i]. #include using namespace原创 2017-10-16 14:01:17 · 255 阅读 · 0 评论 -
HDU 5204 Rikka with sequence 思维.
HDU 5204题意:初始序列为空,现在有n个操作.操作1:将x插入到序列a的每两个数中间,例如{2,4} x=3 ->{3,2,3,4}.操作2: 询问[L,R]的第k小元素?n初始0个 第一次加1个 第二次加2个 第三次加4个...第i次插入操作加入2^i个x.[L,R]查询区间内最多60个数左右.询问[L,R] 对于它上一个op1添加的x. x在[1,原创 2017-10-15 21:10:46 · 179 阅读 · 0 评论 -
HDU 5185 Equation 完全背包变形.
HDU 5185题意:x1+x2...xn=n 约束条件:0给出n 问多少组{x[i]}满足上面等式. n任意一个合法的方案为:{k[0]个0,k[1]个1,k[2]个2....k[i]个i}; k[0]+..k[i]=n; k[1]*1+k[2]*2+..i*k[i]=n.i*(1+i)/2不知道k[i]实际上用多少 类似完全背包.设置f[i][j]:连原创 2017-10-15 14:31:47 · 206 阅读 · 0 评论 -
HDU 5179 beautiful number 数位DP(水)
HDU 5179题意:x={a[1]a[2]a[2]..a[n]},a[1]为高位. 定义一个数x合法,当a[i]>=a[i+1] && a[i]%a[j]==0(1L,R假如最高位为y,a[1]=y 则后面所有的数都为a[1]的因子.其实只要记录前面一个数是多少 后面一个数只要为它的因子即可.数位DP套路:f[pos][pre] 还需要pos位 前一位为pre原创 2017-10-15 11:05:54 · 225 阅读 · 0 评论 -
HDU 5188 zhx and contest 基础DP.
HDU 5188题意:从时刻0开始回答问题,第i个问题得分为v[i],需要t[i]时间解决,并且不能在时刻L[i]之前完成.n最后的完成时间 肯定刚好回答完某个问题.设f[x][i] 前x秒回答前i个问题能得到的最大得分?f[x][i]=max(f[x][i-1],f[x-t[i]][i-1]+v[i] && l[i]>=x).L[i],t[i]像背包一原创 2017-10-15 10:17:49 · 170 阅读 · 0 评论 -
HDU 5193 Go to movies Ⅱ 块状链表套树状数组(带插入和删除的逆序对)
HDU 5193题意:给出n个数的序列a,m个操作。操作1:[x,y] 将y插入到第x个人之后.操作2:[x],将第x个人删除(x+1,..n向前进一格).n,m,a[i]a[j] ).假如当前逆序对为res,那么插入一个数y之后 要知道[x+1,n]有多个比y小,[1..x-1]直接有多个比y大.插入,删除操作 如何处理下标?此时用到一个叫 块状链表的原创 2017-10-14 21:20:29 · 239 阅读 · 0 评论 -
HDU 5195 DZY Loves Topological Sorting 拓扑序(贪心)
HDU 5195题意:n个点 m条有向边的DAG, 现在生成[1..n]的排列,若有边u->v,则说明在排列中u出现在v之前.n,m,k靠前的尽量大,把当前位置能选的点都加入到队列中,即入度每次弹出一个最大的 并更新k,和其他定点的度. 若该点度数>k或者已经被访问,则继续下一个元素.删除u时遍历u的所有边 每条边都只会被遍历一次 复杂度应该在O(m+n)左右.原创 2017-10-14 15:22:39 · 226 阅读 · 0 评论 -
HDU 5213 Lucky 容斥+莫队
HDU 5213题意:给出长度为n的序列a,和一个奇数K. m次询问[l,r,u,v] ln,m记录两组询问区间中每个数的出现频率 增加一个数时容易知道它的贡献,莫队排序后离线一下.[l,r,u,v] 每个询问有两个区间 不能直接排序? 所以把这两个不相关的区间拆成4个独立的区间 .f[l,r]为l,r内两数加为k的对数.res[l,r,u,v] = f[l,v] -原创 2017-10-14 09:50:07 · 175 阅读 · 0 评论 -
HDU 5269 ZYB loves Xor I 贡献+Trie
HDU 5269题意:给出序列a,求累加和:lowbit(a[i] xor a[j]) [i=1..n,j=1..n] n,a[i]lowbit(x)=1010110 异或结果为100.枚举a[i]二进制中起作用的1,则与a[i]异或的x,要满足a[i]和x的后缀pos(第pos位相反)是相同.用map记录后缀出现次数,O(30*n*logn) TLE.每个a[i]原创 2017-10-17 09:20:21 · 255 阅读 · 1 评论 -
HDU 5226 Tom and matrix 组合数求和+Lucas定理.
HDU 5226题意:1e5*1e5的矩阵.当ij时,a[i][j]=C(i,j).现在给出(x1,y1),(x2,y2) 求子矩阵的和 x1,y1,x2,y2求子矩阵和 尝试用二维前缀和来解决.则要知道(0,0)到(x,y)的和.容易知道(0,x)行的第i列秩和 0+..0+C(i,i)+C(i+1,i)+...C(x,i) = C(x+1,i+1) (x+1件物品中取原创 2017-10-17 10:48:57 · 355 阅读 · 0 评论 -
HDU 6351 Beautiful Now 全排列,预处理,暴力
题意:十进制数n.操作:可以交换n的任意两个digit的位置. T<=100.1<=n,k<=1e9. 问k次操作后,能得到最小和最大的数字?贪心:假如要大,当前数字和后面最大数字交换.假如有多种 不一定选最后面的..有反例..n只有9位数(1e9情况只有一种).暴力枚举全排列(第i位变到第p[i]位),一个排列到另外一个排列最少的交换次数为:sigma(每个循环节的...原创 2018-10-26 17:20:51 · 154 阅读 · 0 评论 -
HDU 6370 Werewolf 思维,基环树.
题意:村民只会说真话,狼可能说假话. (i,j,k)表示第i个人说第j个人是k(k=村民或者狼)[i=1..n].i!=j.n<=1e5.总共有2^n种情景(有些可能非法.). 问有多少人一定为村民,以及有多少人一定为狼?因为狼可以将真话也可以讲假话. 假如n个人全部为狼,不会产生任何矛盾,第i人说其他人为村民就当做假话,说别人为狼就当做真话.所以一定为村民的人数为0.先不考虑...原创 2018-10-26 17:24:20 · 181 阅读 · 0 评论 -
HDU 6313 Hack It 构造,数论
题意:要求构造一个n*n的01矩阵,满足其任意的子矩形,其4个角都不全为1.1<=n<=2000.并且矩阵中1的个数要>=85000.令n=p^2. 任意两个01序列相同的1数量不超过1.构造:总共p块.每块有p行,每行分为p个区域.每个区域p列.然后令每一个行中每一个区域都正好有一个1.并且每块中除了第一行以外,其余同行中任意两个1所在位置模p不同余 (同一行1所在...原创 2018-10-26 17:19:00 · 139 阅读 · 0 评论 -
HDU 6311 Cover 欧拉路径,覆盖
题意:n点m条边的无向图,问最少用多少条路径覆盖整张图,要求任意两个路径都不能有公共边. 并输出这些路径.n,m<=1e5.假如原图为欧拉图,那么显然只需要用一条回路.一条路径中,最多只会包含两个奇数点,那么答案>=odd/2 (odd为奇数点的个数.)现在可以构造该答案.将奇数点两两连上虚拟边.总共odd/2条边.在新的图上跑一次欧拉回路,回溯时不标记这些虚拟边,则回路被...原创 2018-10-26 17:18:37 · 188 阅读 · 0 评论 -
HDU 2818 Building Blocks 带权并查集
题意:n堆盒子 初始第i堆放盒子i. Q次操作.操作1: 将包含盒子x的那一堆,放在包含盒子y的那一堆上方.(x,y在同一堆则不操作).操作2: 算出有多少个盒子在x的下方.n用并查集把相同堆的盒子连接在一起.cnt[i]维护每个点到其根节点的距离(底部盒子为根)合并时 cnt[fx]=sum[fy].以fx为根的节点u,现在以fy为根 在find时 都会先经过f原创 2018-01-21 12:15:08 · 188 阅读 · 0 评论 -
HDU 5496 Beauty of Sequence 线性DP
HDU 5496题意:定义子序列的价值为:若该子序列有连续相同的数,则保留第一个,剩下的数之和即为价值i.e 子序列b={1,1,1,1} 价值为1 b={1,2,1,2} 价值为6.给出长度为n的序列a 求出其所有子序列价值的之和. n设d[i]为以i结尾的 子序列价值累加和(不重复计算连续相同的数),f[i]为以i结尾的子序列个数.f[i]=2^(i-1).假如n原创 2017-11-15 12:54:08 · 294 阅读 · 0 评论 -
HDU 5424 Rikka with Graph II 哈密顿路径+dfs找环
HDU 5424题意:给出n点n条边的图,问是否存在哈密顿路径(经过每个点正好一次) nn个点n条边,先找到图中的环(自环没用),则环上最多只能有两个点度数==3不在环上的点 度数不能超过3.图形向"只"形状 显然有解.dfs时 用栈保存当前未遍历完的点 如果u-v v在栈内 则从栈中v开始到u为一个环.#include using namespace std;co原创 2017-11-13 21:55:14 · 272 阅读 · 0 评论 -
HDU 5277 YJC counts stars 最大团+暴力
HDU 5277题意:平面上n个点(x,y).连接m条线段.任意两条线段不相交.找到sz最大的集合满足 集合内的两个两个点都有线段直接相连.和最大sz和最大sz的集合个数? n,m最大团:通俗点讲就是在一个无向图中找出一个点数最多的完全图。因为任意线段不相交 所以最大团的sz最大为4.判定sz是否为4,枚举两条边 两条边(a,b),(c,d)定点都不同 在判定是否有原创 2017-10-17 15:44:00 · 195 阅读 · 0 评论 -
HDU 5274 Dylans loves tree 树链剖分(水)
HDU 5274题意:n个节点的树,第i个节点权值为a[i].Q次操作.操作1:修改a[x]的点权为y操作2;询问[x,y]路径中是否有权值出现奇数次(保证出现奇数次的权值最多一个)n,Q,a[i]修改点权 查询路径中是否有点权出现奇数次.树链剖分后 维护区间的异或和即可. 注意权值可能为0 全部离散化,每个值+1,最后答案减去1即可.#include usi原创 2017-10-17 14:00:32 · 206 阅读 · 0 评论 -
HDU 5200 Trees 离线+链表维护.
HDU 5200题意:给出长度为n的序列a,Q个独立的操作:将序列中小于等于q[i]的数都删除(可以看作-1).当序列中两个数x,y之间无-1存在 则x,y是属于同一组. 问每次操作后序列被分为多少组? n,Q首先离线处理 按q[i]从小到到处理 设置另外一个排好序的序列b(二元组 记录val和pos).然后用链表把序列a给串起来.每次询问从序列b中取出位置pos进行删原创 2017-10-13 21:44:03 · 209 阅读 · 0 评论 -
HDU 5168 Legal path 最短路 OR DP
HDU 5168题意:n个结点的有向图,边带权.定义合法路径为:该路径上的每条边都满足比它前一条至少大k.合法路径的长度为:该路径上所有边的权值.可能有重边.n,mn的最短合法路径.记录前面一个边的值 然后直接跑SPFA WA.... 16 7 21 2 22 3 43 4 61 5 35 4 84 6 84 6 10u-v边较小,后面机原创 2017-10-13 16:32:46 · 239 阅读 · 0 评论 -
HDU 5143 NPY and arithmetic progression 思维+枚举
HDU 5143题意:1,2,3,4的个数分别为a,b,c,d 问用这些数是否能组成若干个长度>=3的等差数列.a,b,c,d首先,AP(等差数列)只有6种,111(...),222(..),333(...),123,234,1234关键点:3个123 可以看作3个1,3个2,3个3. 234,1234也类似.所以最后结果只有 常数列+ 0~2个123,0~2个234,0~2个原创 2017-10-09 21:29:04 · 265 阅读 · 0 评论 -
HDU 5286 wyh2000 and sequence 分块,贡献,好题
HDU 5286题意:给出长度为n的序列a,Q次在线询问[L,R],当[L,R]有k个不同的数c1,c2..ck,并且c[i]出现b[i]次.每次询问,求累加和[i=1...k](c[i]^b[i])n,Q能离线的话就直接莫队搞一搞 然而本题要求在线..在线就分块呗,O(n*sqrt(n))预处理出res[i][j] 第i块到第j块的ans (预处理方法就是更新新加原创 2017-10-18 19:32:11 · 225 阅读 · 0 评论 -
HDU 5171 规律+矩阵快速幂(水)
HDU 5171题意:给出序列a,操作:每次从序列选两个数相加后,将新数加入序列a.n,a[i]序列和最大,每次选当前最大和次大相加, k如果在1e5左右 优先队列直接模拟, 现在k当前最大和次大分别为a,b..则操作第1,2,3,..k次操作后加入的数为:a+b,2a+b,3a+2b,5a+3b,8a+5b,...发现第k次a和b的系数为fib(k+1),fib(k)原创 2017-10-09 19:37:36 · 230 阅读 · 0 评论 -
HDU 5266 pog loves szh III 区间的LCA,ST表
HDU 5266题意:以1为根,n个节点的树.Q次询问,每次询问[L,R],问编号L,L+1..R.这R-L+1个节点的LCA是多少?n,QLCA(a,b)=x, LCA(c,d)=y. 则LCA(a,b,c,d)=LCA(x,y).设F[k][i]为以i开头长度为2^k的区间的LCA. 用RMQ处理即可.#pragma comment(linker, "/STACK:原创 2017-10-18 09:45:40 · 264 阅读 · 0 评论 -
HDU 5057 Argestes and Sequence 离线处理+树状数组
HDU 5057题意:给出n个数的序列a,m个操作. n,m操作1:[s,x,y] 将第x个数设置成y a[x]=y.操作2:[q,l,r,d,p] 问[l,r]内有多少个数的第D位(从低位开始数)正好是数字P.关键:离线一位一位处理,假如现在处理的都是:关于第i位的询问.遍历序列中的每个数,将每个数的第i位都仍到树状数组中,BIT要多加一维 标志当前这个位置第i位出现原创 2017-10-08 22:35:54 · 202 阅读 · 0 评论 -
HDU 5340 Three Palindromes 暴力+Manacher
HDU 5340题意:给出串s,问是否能把s正好分成3个区间,并且每个区间都为回文.|s|分法肯定问某个前缀+某个后缀 然后中间部分.暴力到O(n^3) TLE..用Manacher处理出可能的前缀还有后缀结尾.st,ed 然后算出中间串的对称中心用r[i]判定其半径是否能超出范围即可.O(n^2).#include using namespace std;type原创 2017-10-17 20:22:38 · 171 阅读 · 0 评论 -
HDU 5144 NPY and shot 三分(物理)
HDU 5144题意:站在高度为h的平面上,以初速度v[0]以某个角度扔球,问最远能仍到的位置? h,v知道角度就能知道水平位置.显然角度过大或者过小 水平距离都不会太远,三分最优角度即可.#include using namespace std;const int N=2e2+5;const double pi=acos(-1.0),g=9.8,eps=1e-8;doub原创 2017-10-08 15:35:21 · 212 阅读 · 0 评论 -
HDU 5125 Magic Balls DP(LIS变形)
HDU 5125题意:给出长度n的序列a,b.操作:swap(a[i],b[i]) 问操作次数n,m一般来说求LIS时 设d[i]为以a[i]结尾时的最长长度,现在第i为可能为a[i]或者b[i]加上一维.d[i][0/1] 其前面一个 j 要么为a[j]或者b[j] 按题意转移即可交换次数不超过m,设置num[i][0/1]表示到达该状态需要用到的最小交换次数.若nu原创 2017-10-08 10:15:38 · 218 阅读 · 0 评论 -
HDU 5148 Cities 树形DP(背包)
HDU 5148题意;n个点的树,第i条边长度为c[i],任意选中k个点为特殊点,这k个点中,任意两点间距离的期望值最小为多少?nk个点任意选两个有k^2种选法 (u,v)对期望贡献为 dis(u,v)/k^2 也就是说要求这min(k个点中任意两点距离累加和/k^2)先考虑一个特殊的情况 当k==n时 树上任意两点距离的累加和.若u的子树中,有x个节点被选中,则(u,原创 2017-10-07 15:20:07 · 167 阅读 · 0 评论 -
HDU 5270 ZYB loves Xor II 异或,贡献,双指针.
HDU 5270题意:给出长度为n的序列a和序列b,问序列c[k]=(a[i]+b[j]) [i=1..n,j=1..n] 的异或和.n序列c中总共n^2个数,考虑每个位的贡献? 设异或的结果为res假如res总共有60位 考虑第i位是0还是1. 也就是求出c[k]=(a[i]+b[j])中第i位为1的个数?考虑第i位时,方便计算,先舍去高位.若第i位为1 则相加的原创 2017-10-18 21:23:57 · 466 阅读 · 0 评论 -
HDU 5172 GTY's gay friends 线段树(排列,区间不同的数)
HDU 5172题意:给出长度为n的序列a,m次询问[L,R],问a[L]..a[R]是不是[1..R-L+1]的某个排列?.n,mm=R-L+1,若[L,R]的区间和为sum=m*(1+m)/2 并且[L,R]每个数都不相同 则说明[L,R]为1..m的一个排列.因为[L,R]每个数都不同 设最小为mn 则要想和为sum 则mn=1 并且排序后每个数都相差1.没有修改原创 2017-10-10 14:03:28 · 222 阅读 · 0 评论 -
HDU 5568 sequence2 DP+高精度
题意:长度为n的序列a,问有多少个长度为k的递增子序列? ndp[i][j]:第i个数结尾 长度为j的子序列个数 O(n^3).答案最大为C(n,k) 会爆long long 用高进度加#include using namespace std;typedef long long ll;const int N=1e2+5,mod=1e8;struct Bigint{ int l原创 2017-11-08 11:51:15 · 181 阅读 · 0 评论 -
HDU 5141 LIS Again LIS变形+BIT
HDU 5141题意:给出长度为n的序列a,序列a的LIS长度为L,问有多少个区间[i,j]有长度为L的LIS.n枚举右端点R 然后找到最右边的一个L 使得[L,R]的子序列有长度为L的LIS. 则区间[1..L,R]都有长度为LIS的子序列.先算dp[i] 以i结尾的LIS长度 和 rg[i]: 以i结尾子序列长度为LIS时最右的左端点 离散化后用BIT维护该段LIS最大值和原创 2017-10-13 10:10:50 · 225 阅读 · 0 评论 -
HDU 5212 Code GCD容斥(套路).
DU 5212题意:给出长度为n的序列a,求定义f(i,j)为gcd(a[i],a[j])*(gcd(a[i],a[j])-1).求f(i,j)的累加和[i=1..n,j=1...n] 答案模mod.n,a[i]直接遍历序列显然是TLE的.a[i]当x作为gcd 算出x的倍数有num个 则任选两个方案为num^2 .其中重复为gcd=2x,3x..kx产生的贡献用d原创 2017-10-12 21:37:56 · 248 阅读 · 0 评论 -
水题合集
HDU 5101题意:n个班级 第i个班级有num[i]个人,第j个人的战斗力为v[i][j].nk并且两个人不在同一班时的方案数?把所有人的战斗里存到某个数组b中 然后将b排序.枚举第一个人为第i个班级第j个人,其战斗力为x,则快速找到b中第一个>k-x的位置pos 则a[i][j]贡献tot-pos+1.然后在a[i]中二分,扣掉同一班级的即可.O(n*m log原创 2017-10-07 23:02:59 · 196 阅读 · 0 评论 -
HDU 5145 NPY and girls 莫队+多重集排列
HDU 5145题意:给出长度为n的序列a,m次询问:给出[L,R],为a[L],a[L+1]..a[R]组成的集合的排列方案是多少?n,m,a[i]每次询问的是多重集的排列方案?回顾一下:[L,R]有k种不同数字 n1+n2+.nk=n 则假设排列方案为x 容易列出x*n1!*n2!..nk!=n!得x=n!/(n1!*..nk!).容易知道增加和删除一个数以后答案的变化原创 2017-10-12 12:15:45 · 205 阅读 · 0 评论 -
HDU 5282 Senior's String DP(LCS变形)
HDU 5282题意:给出两个字符串a,b.假如a,b的LCS长度为L,从a中选出子序列长度为LCS并且该子序列在b中出现,问有多少种方案? | a|,|b|dp[i][j]:a的前缀i和b的前缀j的LCS长度.f[i][j]:a的前缀i有多少个长度为dp[i][j]的子序列出现在b的前缀j中.然后现在考虑选不选a的第i个字符.不选a[i],则需要dp[i-1][j原创 2017-10-12 10:53:03 · 197 阅读 · 0 评论