多校
GoLakerswxy
这个作者很懒,什么都没留下…
展开
-
hdu 6435 Problem J. CSGO(多维最远曼哈顿距离)
题目:在两个点集内各选一点求最远曼哈顿距离。思路:把绝对值去掉后有2^k次方种可能的情况,都枚举一遍。#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5+10;const ll inf = 1e12;struct point{ ll ...原创 2018-08-24 20:05:41 · 300 阅读 · 0 评论 -
HDU-6396 Swordsman(贪心)
题目:每个怪兽有k种防御属性,剑士有m个魔法属性,杀死一个monster需要m个属性都要大于等于这monster相应的防御值,然后剑士的m个魔法属性值都会相应的加上val[i]...val[m].问剑客最多能杀多少monster,并且输出最后的各个魔法属性值。#include <bits/stdc++.h>using namespace std;namespace fa...原创 2018-08-13 19:55:54 · 265 阅读 · 0 评论 -
HDU-6356 Glad You Came (rmq)
题目:刚开始一个长度为n(n<=1e5)的全为0的数组a,生成q(q<=5e6)组更新(l,r,v)把 l 到 r 区间内小于v的数都更新成v,最后输出n个数字的抑或值。思路:时间卡的好紧,比赛时,优先队列维护T,线段树也T,时间复杂度O(qlogn),但是q太大了数据组数又比较多。赛后看官方题解分析的是rmq,O(nlogn),更新时逆向更新就好。#include <...原创 2018-08-06 20:25:33 · 220 阅读 · 0 评论 -
HDU-6333 Problem B. Harvest of Apples(莫队+组合数)
题目:求C(n,0)+C(n,1)+C(n,2)+.......+C(n,m)思路:S(l,r)=S(l,r-1)+C(l,r) S(l,r)=2*S(l-1,r)-C(l-1,r);(想想杨辉三角就容易看出来了) S(l,r)=S(l,r+1)-C(l,r+1) S(l,r)=(S(l+1,r)-C(l,r))/2; (由上面得到)预处理阶...原创 2018-08-01 21:54:38 · 286 阅读 · 0 评论 -
牛客网多校7 Sudoku Subrectangles (模拟瞎搞)
题目:给由一个n*m(n*m<=1e6)的矩阵由大写字母和小写字母构成,问有多少个子矩阵满足每一行每一列没有重复出现的字母思路:预处理出以每个点往上和往右的最大长度,然后n*m枚举子矩阵的右下角,看以它为右下角时有多少满足条件的即可。从这个点往上往左的点能延伸的长度都满足了单调性,所以用这个特性瞎搞一下就可以了。比赛时虽然过了这个题,但是写的比较乱改动很多,现在从新整理下思路吧。统计...原创 2018-08-10 16:27:22 · 232 阅读 · 0 评论 -
HDU-6336 Problem E. Matrix from Arrays(找规律)
题目:生成一个矩阵,然后查询一个子矩阵的所有数字和。思路:队友打表找到规律,矩阵是由一个小矩阵重复出现构成的,然后就是要找查询的矩阵中的数的和就好搞了,边界一定要处理好,刚开始想的是维护矩阵前缀和的思路,感觉并不好弄,然后想的是看每一个数对总体的贡献是多少,这样就好搞了。当时一会想这个题一会又去推另一个题的公式,有点浮躁,就没改好代码好可惜。。。还是自己太菜了!#include<b...原创 2018-08-01 19:10:44 · 168 阅读 · 0 评论 -
HDU-6326 Problem H. Monster Hunter(贪心模拟)
题目:给定一棵 n 个点的树,除 1 外每个点有一只怪兽,打败它需要先消耗 ai点 HP,再恢复 bi点 HP。求从 1 号点出发按照最优策略打败所有怪兽一开始所需的最少 HP。思路:以 1 为根将树转化成有根树,那么每只怪兽要在父亲怪兽被击败后才能被击败。假如没有父亲的限制,会产生一个最优的攻击顺序:第一步:将怪兽分成两类:a < b 的和 a ≥ b 的,前一类打完会加血,后一类...原创 2018-08-01 10:46:43 · 890 阅读 · 0 评论 -
牛客网多校7 Bit Compression (搜索剪枝)
题目:• 初始长度2^n的01序列列,要从^&|中选择n个运算符。• 序列长度:(2^n)->(2^(n-1))-> … ->16->8->4->2->1。• 问有多少个可能,使得运算后剩下的一个字符为1。思路:比赛时为啥不好好看看想想这个题呢,只想那个构造去了,,真的是垃圾#include <bits/stdc++.h>...原创 2018-08-09 21:38:07 · 219 阅读 · 0 评论 -
牛客网多校7 Counting 4-Cliques (构造)
题目:构造一个<=75个点的图,使得大小为4的团恰有k个。(k<=1e6)思路:(官方题解)自己写的只过了百分之七十数据。。。•构造一个大小为t的完全图,和a, b, c, d, e五个点。•a, b, c, d, e五个点之间没有边,他们只会向t个点连边。•如果连了x个,构成C(x, 3)个大小为4个团。•找到最大的t,枚举a,b,c,d,计算e。#include...原创 2018-08-09 21:09:25 · 316 阅读 · 0 评论 -
HDU-6390 GuGuFishtion(莫比乌斯反演)
题目: 给出n,m,p求思路:phi(a)=a*(1-1/p1)*(1-1/p2)*.....*(1-1/pn) pi是a的素因子;phi(a*b)=a*b*(1-1/p1)*(1-1/p2)*.....*(1-1/pm)里面包含了a和b的所有素因子(去重后的)。phi(a*b) / (phi(a)*phi(b)) 约分后的结果就是1/[ (1-1/p1)*(1-1/p2)*....原创 2018-08-13 18:56:34 · 366 阅读 · 0 评论 -
hdu 6393 Traffic Network in Numazu(最短路,树状数组,lca,欧拉序)
题目:给你一个n边n点的无向连通图,两个操作,操作一改变某个边的权值,操作二查询某两个点之间的最短路径长度。思路:在环上拿出一条边来放一边,搞一棵树出来,因为两点间最短距离就是是两点各自到根的距离之和减去 2*两点的lca到根的距离。 修改操作就变为维护点到根的这条链上的权值,差分得到欧拉序,用树状数组维护。查询的时候直接查询距离,再加上拿出来的那条不用的边情况,取最小即可。找了好久的...原创 2018-08-14 15:05:24 · 309 阅读 · 0 评论 -
hdu 6363 bookshelf(莫比乌斯反演)
题目:把N本书放到K层的书架上,每一层的美丽值为bi=2*fib[cnt]−1,其中cnt是这一层书的数量,fib[ ]为斐波那契数列,整个书架的美丽值为gcd(b1,b2,...,bk),问整个书架的美丽值的期望。看了某大佬博客上详细的分析才补上的这个题,写的太好了。#include<bits/stdc++.h>using namespace std;typedef l...原创 2018-08-14 19:31:42 · 218 阅读 · 0 评论 -
牛客网多校9 Typing practice(kmp)
题目:n个模式串,一串操作比如aaa-bc-表示在一个空串中加入一个字符,或者在末尾移走一个字符,每次操作后问最少再加几个字符使得后缀中出现至少一个模式串。思路:普通kmp T到绝望,一个实例:s数组为aaaaaab-b-b-,t数组是aaaaaaaa,那么每次加入一个b字母,j=nxt[j]就要不停地调到0,这样复杂度会退化为tlen*slen. 这时候需要修改next数组,使两个字符不相...原创 2018-08-17 13:43:29 · 433 阅读 · 0 评论 -
牛客网多校9 Circulant Matrix (FWT)
题目:给你一个a数组和b数组,构造出A[i][j]矩阵(A[i][j] = a[i xor j]),解x数组。n等于4的时候有:A[0][0]*x[0] + A[0][1]*x[1] + A[0][2]*x[2] + A[0][3]*x[3] = b[0] (mod p)A[1][0]*x[0] + A[1][1]*x[1] + A[1][2]*x[2] + A[1][3]*x[3] = b...原创 2018-08-16 20:48:19 · 329 阅读 · 0 评论 -
hdu 6398 Pizza Hub(计算几何)
题目:给定三角形三点坐标,可以任意旋转,和矩形的宽度,求矩形的最小高度,使得矩形能装下三角形。思路:最优的情况下肯定是有一个顶点顶在矩形的角上,然后枚举相邻两条边哪一个在上哪一个在下面就可以了。边界很容易出错,要判断能不能装进去基础上才能找最优的放法。#include <bits/stdc++.h>using namespace std;#define eps 1e-8...原创 2018-08-16 10:24:47 · 400 阅读 · 0 评论 -
牛客网多校5 F.take (树状数组)
题目:有n个盒子,每一个盒子i有p[i]的概率开出d[i]大的钻石,现在持大小为0的钻石,依次从1~n打开箱子,如果箱子内的钻石比手中的大时就交换。求交换次数的期望。思路:交换的前提是其前面比这个大的钻石都没打开,当前这个开出了钻石,所以可以先从大的钻石考虑,用树状数组维护一下大钻石造成的影响。题目给的输入输出格式中间计算要用逆元。#include<bits/stdc++.h>...原创 2018-08-03 15:33:30 · 195 阅读 · 0 评论 -
HDU-6331Problem M. Walking Plan(dp,floyd)
题目:一个有向图,q组询问,每组询问(x,y,z)问从x到y至少经过z条路时的最短路径。思路:w[i][j]表示从i到j恰好经过1条路径的最短长度(就是原图)。 dpa[t][i][j]表示从i到j恰好经过t条路径的最短长度。 dpb[t][i][j]表示从i到j恰好经过100∗t条路径的最短长度。 最后floyd来更新dpb数组得到至少经过100∗t条道路的最短路. ans=mi...原创 2018-08-03 13:17:55 · 235 阅读 · 0 评论 -
HDU-6357 Hills And Valleys(dp)
题目:给你一个长度1e5仅有0...9数字组成的序列,允许你选任意一个区间然后反转一次,对于新的序列,求最长不下降子序列的长度,以及相应的反转的区间(l,r).思路:大概最长不下降序列的总体变化趋势是0,1,2.....8,9,设为s数组。反转a数组相当于找s数组的两个端点反转一下变成:0,1,2,…x−1,x, (y,y−1,y−2,……,x+1,x,) y,y+1,……8,9 ...原创 2018-08-07 19:11:38 · 189 阅读 · 0 评论 -
牛客网多校5 gpa(01分数规划)
题目:n个物品每个物品的重量是si,价值是si*ci,删除最多k个物品使得剩下的物品的最大。思路:01分数规划。条件C(x):可以挑选使得单位重量的物品价值不小于x->求满足条件的最大x->如何判断C(x)价值和 / 重量和>=x 价值和 - 重量和*x>=0和(价值-重量*x)>=0可以对(价值-重量*x)的值进行贪心的选取,选取最大的m...原创 2018-08-03 09:36:47 · 224 阅读 · 0 评论 -
HDU-6341 Problem J. Let Sudoku Rotate(dfs 剪枝)
题目:有一个4*4*4*4的数独,每一横每一竖每一个小方块中都无重复的字母,即都为0-9,A-F.。有一个已经填好的数独,若干个4*4的方块被逆时针拧转了若干次,问拧转回来至少需要多少次。思路:dfs,看起来复杂度会很大,但是数独的限制性较大,加个最优化剪枝和可行性剪枝(判断转到每一4*4的区域后是不是与前面的转好了的冲突)能减掉很多的可能性。#include <bits/stdc...原创 2018-08-03 09:22:06 · 475 阅读 · 0 评论 -
牛客网多校3 Sort String(后缀数组DC3)
题目:就是给你一个串,对于第i个位置,你可以把前i个字符放到队尾形成一个新的字符串,问你最后一共有几个字符串DC3卡过去了hhhh#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define F(x) ((x)/3+((x)%3==1?0:...原创 2018-07-27 22:04:11 · 203 阅读 · 0 评论 -
牛客网多校2 message(凸包维护)
题目:给你n条直线的y=ax+by=ax+b中的aa和bb,和m次查询,每次查询给要求的直线的y=cx+dy=cx+d,中的cc和dd,要求出这条直线与n条直线交点中,x最大的值,且x大于0,如果不存在输出No cross.(n<=5e4,m<=5e4)思路:交点x= - (b-d)/(a-c) 可以看作是两个点(a,b),(c,d)斜率的相反数。将之前输入的直线的斜率和截距看作一...原创 2018-08-09 19:54:13 · 264 阅读 · 0 评论 -
牛客网多校1 Symmetric Matrix(递推)
题目:构造一个n*n的矩阵,使得Ai,i = 0,Ai,j = Aj,i,Ai,1+Ai,2+...+Ai,n = 2。求种类数。题解: 把构造的矩阵当成邻接矩阵考虑。那么所有点的度数都为2,且存在重边但不存在自环。这种情况的图为多个环,即每个点都在且仅在一个环里。考虑每次加一个点来递推dp[]。假设当前是第n个点,从前n-1个点中筛出(1~n-3)个点和第n个点形成环。设n-1个点中保...原创 2018-07-20 19:24:33 · 429 阅读 · 0 评论 -
牛客网多校1 Sum of Maximum(数学,求Σi^k)
题目:对n个最大值排序,然后枚举最大值在相邻两个边界之间的区间上的贡献,求和。当时式子都推出来了,但是不会求1^k+2^k+3^k+....+n^k,刚找到一个板子。const int maxn=2005,mod=1e9+7;typedef long long ll;int b[maxn],c[maxn][maxn],inv[maxn],ans,tmp;ll calc(ll n,int...原创 2018-07-20 15:37:17 · 553 阅读 · 0 评论 -
牛客网多校4 Hash Function(拓扑排序)
感觉自己很恍惚,真的是越来越菜了。题目:给一个哈希表,判断哈希表是不是合法,合法的话求一个字典序最小的插入序列,不合法输出-1思路:建图好困难,比赛时自己建图乱七八糟,赛后看了大佬的代码才最终完成自己的。题解是线段树建图...emm没用过。记录一个movl[i]表示这个点可以往前移动的合法步数,过程中找前面的可行点连边,movl路径压缩。总共连边数最多最多也是不会超过2n的,O(n)建...原创 2018-07-28 21:09:45 · 232 阅读 · 0 评论 -
牛客网多校1 Removal(dp)
题目:给你一个n长度的序列s,删除m个数后产生的序列有多少种?(n<=1e5,m<=10,si<=10)dp[i][j]表示i长度,以j数字结尾的方案数#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mod=1e9+7;const int maxn=1...原创 2018-07-20 14:36:58 · 270 阅读 · 0 评论 -
牛客网多校1 Different Integers(莫队或树状数组)
给你一个数组, 长度n<=1e5, q次询问(l, r), 输出区间[1, l], [r, n]中不同数字的个数, q<=1e5莫队 简单粗暴:#include <bits/stdc++.h> using namespace std;const int maxn=1e5+10;struct node{ int l,r,id;}s[maxn];i...原创 2018-07-20 09:12:23 · 224 阅读 · 0 评论 -
牛客网多校1 Monotonic Matrix (L-G-V Lemma应用两侧,行列式)
题目:在所有的n*m的矩阵中,数出满足条件的矩阵的数量(% 1e9+7)* Ai, j ∈ {0, 1, 2} for all 1 ≤ i ≤ n, 1 ≤ j ≤ m.* Ai, j ≤ Ai + 1, j for all 1 ≤ i < n, 1 ≤ j ≤ m.* Ai, j ≤ Ai, j + 1 for all 1 ≤ i ≤ n, 1 ≤ j < m.考虑到01和...原创 2018-07-20 13:07:01 · 553 阅读 · 0 评论 -
HDU-6299 Balanced Sequence(贪心)
题目:n个包含 ’(‘ 和 ’)’ 的字符串,将这些字符串任意排序,求能过匹配消除多少括号。贪心排个序,WA了十几发,看题解才知道,唉好菜啊啊啊。。还有因为没初始化???#include<bits/stdc++.h>using namespace std;const int maxn=1e5+10;struct node{ int l,r;}a[maxn]...原创 2018-07-23 22:53:23 · 701 阅读 · 0 评论 -
HDU-6304 Chiaki Sequence Revisited(找规律)
题目:求数列的前n项和。每个数出现的次数是log(lowbit(i))+1次,可以二分出a[n]的值,对于同样的次数会构成了一个等差数列。公差就是2^i,项数是n/2^i.太菜了自己打表没弄出来,参考了https://blog.csdn.net/purple_bro/article/details/81177315写的好详细。#include<bits/stdc++.h>...原创 2018-07-24 20:30:28 · 303 阅读 · 0 评论 -
牛客网多校1 Substring(后缀数组)
题目:给你一个只含abc的字符串,求出所有不同构的子串。同构的定义是指在所有的映射方案下不相同,例如abc可以映射为acb bac bca cab cba,这六个串是相互同构的。(题意是一直没明白啊,,)思路:把abc的所有的映射方案枚举出来,然后按照每种映射方案把S串变换为6个串。最后求出6个串的(不同子串数量+3*单一字符的串数量)/6。除以6 ,例如ab->(ab,ac,ba,bc...原创 2018-07-30 09:29:29 · 273 阅读 · 0 评论 -
牛客网多校2 transform(二分+尺取)
题目:在一个数轴上有n个集装箱,第 i 个集装箱的位置为x[i],且在集装箱内装有w[i]件货物,现在将这些集装箱内的货物进行移动(将一件货物从第 i 个集装箱移动到第 j 个集装箱的花费就为2*abs(x[i]-x[j]) ),求在总花费不超过T的情况下,最多能将多少货物移动到同一个集装箱内。思路:二分一下num个集装箱被移到一起,用尺取判断是否存在可行方案。判断时由num可以确定区间的长度...原创 2018-07-30 10:23:32 · 226 阅读 · 0 评论 -
牛客网多校3 PACM Team(dp 多维)
题目:有n个物品,每个物品需要四种代价,分别需要ai,bi,ci,di。价值为val[i]。1<<36 ??? 我是智障!1ll<<36啊!!!不过比赛时好像过了。。过题也很无奈#include <bits/stdc++.h>using namespace std;typedef long long ll;int dp[2][40][40][4...原创 2018-07-26 20:02:54 · 302 阅读 · 0 评论 -
牛客网多校5 H subseq (树状数组)
题目:给定一个序列 a[1..n],求下标字典序第 k 小的严格递增子序列 1<=n<=10^5 0<=k<=10^(18)思路:考虑逐位确定,每次大概要算 a[i…n] 中,第一项 >=x 的严格递增子序列的个数,这个可以用一个可持久化线段树或者树状数组维护。#include <bits/stdc++.h>using namespa...原创 2018-08-05 11:04:10 · 217 阅读 · 0 评论 -
牛客网多校5 I-vcd (树状数组)
题目:有 n 个点,一个点集 S 是好的,当且仅当对于他的每个子集 T,存在一个右边无限长的矩形,使得这个矩形包含了 T,但是和 S-T 没有交求这 n 个点里有几个好的点集 1<=n<=10^5思路:对于 |S|=1,他显然是好的对于 |S|=2,只要两个点的 y 坐标不相同,那么这个集合也是好的对于 |S|=3,三个点的形状必须是 < 型。用树状数组统计,按x...原创 2018-08-04 11:47:42 · 208 阅读 · 0 评论 -
HDU 6321Problem C. Dynamic Graph Matching(模拟,状压)
题目:给你n个点,m个操作,每种操作要么加一条边要么减一条边,紧接着询问当前选出1条无公共端点的边,2条无公共端点的边,3条.....n/2条无公共端点边时分别有多少种不同的选择。(n<=10) 思路:真是刺激,比赛时想到了状压没想到怎么搞,然后疯狂算暴力的复杂度。感觉还可以,应该不会T。交了一发,疯狂刷新后结果TLE。然后发现还可以优化下常数,直接把下面的代码写到init里面预处理出4...原创 2018-07-30 20:17:59 · 230 阅读 · 0 评论 -
HDU 6325 Problem G. Interstellar Travel(单调栈)
题目:给定平面上 n 个点,起点横坐标最小,终点横坐标最大。每次可以飞到一个横坐标严格更大的点,代价为两个坐标的叉积。求起点到终点总代价最小的飞行路线,并输出字典序最小的路线。思路:比赛时题目那么多提交然而就几十个人过 (通过率83/946),真的有深坑啊。重合的点只能选一个???fuck,就因为没看到严格大于,wa成傻逼。单调栈维护一个上凸的路径很容易就解决了,判断条件很多,排序的时候也要...原创 2018-07-30 19:58:35 · 366 阅读 · 0 评论 -
牛客网多校2 car(思维模拟)
看到图就明白怎么放了。。。学妹好厉害呀#include <bits/stdc++.h> using namespace std;typedef long long ll;const int maxn=1e5+10;int n,m,r[maxn],c[maxn];int main(){ while(~scanf("%d%d",&n,&m))...原创 2018-07-22 13:25:39 · 248 阅读 · 0 评论 -
牛客网多校2 travel(树形dp)
题目:给你一棵你个点的树,每个点有一个价值,选出三条不相交的链使得最后的总价值最大。显然是树形dp,我定义了一个三维的dp[i][j][k](i为子树id,j为选择了几条链,k为选择的j条链中是否包含了经过i点的直链)(0<=j<=3,0<=k<=1)。昨晚写这个题的时候一直就是过48%的数据,真是烦啊,今天发现定义一个全局变量的数组,里面递归时出错,真是无语了。改...原创 2018-07-22 13:03:24 · 441 阅读 · 0 评论 -
牛客网多校5 D-inv(树状数组 思维)
题目:给一个n以内所有偶数的排列,将有序(从小到大1,3,5......n-1)的奇数列插入到偶数列中,使得形成的逆序对最少。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=2e5+10;int c[maxn],n,a[maxn];int lowbit(int...原创 2018-08-24 20:11:30 · 217 阅读 · 0 评论