- 博客(291)
- 收藏
- 关注
原创 51NOD 1670 打怪兽
1670 打怪兽基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题收藏关注lyk在玩一个叫做“打怪兽”的游戏。游戏的规则是这样的。lyk一开始会有一个初始的能量值。每次遇到一个怪兽,若lyk的能量值>=怪兽的能量值,那么怪兽将会被打败,lyk的能量值增加1,否则lyk死亡,游戏结束。若怪兽全部打完,游戏也将会结束。共有n个怪兽,由于lyk比较弱...
2018-03-31 17:19:56
393
原创 51NOD 1358 浮波那契 【矩阵快速幂】
1358 浮波那契基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题TengBieBie已经学习了很多关于斐波那切数列的性质,所以他感到一些些厌烦。现在他遇到了一个新的数列,这个数列叫做Float-Bonacci。这里有一个关于Float-Bonacci的定义。对于一个具体的n,TengBieBie想要快速计算FB(n).但是TengBieBie对F
2018-01-17 20:28:25
412
原创 Codeforces790B. Bear and Tree Jumps 【树型DP】
传送门ans=∑ceiling(disi,jk)ans=\sum{ceiling(\frac{dis_{i,j}}{k})} 令f(x,k)=k−x%k令f(x,k)=k-x\%k 则ans=∑disi,j+f(disi,j,k)k=1k(∑disi,j+∑f(disi,j,k))则ans=\sum{ \frac{ dis_{i,j}+f(dis_{i,j},k) }{k} } = \frac1
2017-10-31 15:51:55
464
原创 51NOD 1460 连接小岛 「贪心」
传送门显然桥a能连在li+1−ri<=a<=ri+1−li显然桥a能连在l_{i+1}-r_i<=a<=r_{i+1}-l_i 于是问题就转化为n−1个活动,每个活动可以在[li,ri]时间内进行,给出m个空闲时间,问能否完成于是问题就转化为n-1个活动,每个活动可以在[l_i,r_i]时间内进行,给出m个空闲时间,问能否完成 非常经典的活动分配问题非常经典的活动分配问题 按ri升序排序,ri
2017-10-30 21:45:48
604
原创 UVALive 7139 - Rotation
传送门题意:由n*m个格子组成的网格地图,一辆车沿着边移动,车从起点出发,最终又回到起点 每个格子中间都站着一个人,一直面向着车,若(x,y)格子的人在车子行驶过程中,顺时针转了a度,逆时针b度,则对答案的贡献是(a−b360)2{(\frac{a-b}{360})}^2,求贡献之和因为最终必定要回到起点,所以不难发现没有被车的路径包围住的格子,对答案贡献都是0 而当车子从(x,y)->(x+d
2017-10-17 22:13:45
489
原创 UVALive - 7045 Last Defence
传送门101,1000,899,101,798,697,101,596,495,101,394,293,101,192,91,101,.....101,1000,899,101,798,697,101,596,495,101,394,293,101,192,91,101,..... 7,4,3,1,2,...7,4,3,1,2,... 不难发现 ①:假如当前只有a,b,l=abs(a−b)a,
2017-10-15 21:59:12
483
原创 UVALive - 7040 Color 【容斥定理】
传送门f(k)=k∗(k−1)n−1=选择不超过k种颜色,相邻颜色不同,染n个格子的方案数(第一个格子有k种选择,之后n−1个格子有k−1种颜色可以选)f(k)=k*(k-1)^{n-1}=选择不超过k种颜色,相邻颜色不同,染n个格子的方案数(第一个格子有k种选择,之后n-1个格子有k-1种颜色可以选) 恰好使用了k种颜色的方案数=f(k)−(不使用颜色1+不使用颜色2+...)+(不使用颜色1和
2017-10-15 21:21:23
446
原创 HDU3507 Print Article 【斜率优化DP】
传送门sum[i]=∑ij=0c[j]sum[i]=\sum_{j=0}^{i}c[j] d[i]=min{d[j]+M+(sum[i]−sum[j])2 | j<i }d[i]=min\{d[j]+M+(sum[i]-sum[j])^2\ |\ j<i\ \} 若d[a]+M+(sum[i]−sum[a])2<d[b]+M+(sum[i]−sum[b])2若d[a]+M+(sum[i]-s
2017-10-12 22:48:36
342
原创 HDU5952 Counting Cliques 【搜索剪枝】
传送门直接dfs搜索,当前搜到u点,则只向前搜索>u的点即可#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair<ll,ll>#define MEM(a,x) memset(a,x,sizeof(a))#define lowbit(x) (
2017-10-11 21:32:33
337
原创 Timus 1003. Parity 【并查集】
传送门输入的询问可能=0 巨坑…..因此re一晚上令sum[j]=∑ji=0a[i] (mod2)令sum[j]=\sum_{i=0}^{j}a[i]\ \ \ (mod 2) 则若sum[a]=sum[b]且sum[b]=sum[c],则sum[a]=sum[b]=sum[c]具有传递性则若sum[a]=sum[b] 且sum[b]=sum[c],则sum[a]=sum[b]=sum
2017-09-28 16:39:41
579
原创 51NOD 1952 栈 【单调队列】
传送门动态维护一个非严格单调递增队列即可 这样队列尾就是最大值 每个元素只可能进出队列各一次 O(n)#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair<ll,ll>#define MEM(a,x) memset(a,x,sizeof
2017-09-26 20:21:44
366
原创 2017北京网赛hihocoder #1582 : Territorial Dispute 【凸包】
传送门分情况讨论 当n>=4时: 显然必然yes,随便抽出4点: 1.如果形成凸多边形,则ABAB必然成立 2.如果形成凹多边形,则必定3点能形成三角型,剩余一点在三角形内,那三角形3点为A,内部一点为B即可 3.四点共线,ABA成立当n=3时:显然只有三点共线才成立 当n<=2时,必然不成立于是求一遍凸包,若凸包含有4个不同点,凸多边形 含有3个不同点,三角形 如果只有2个不同点,
2017-09-23 22:43:36
403
原创 2017北京网赛 hihocoder #1580 : Matrix 【DP】
传送门就像最大子矩阵和一样降维 先不考虑p 枚举行i,j,sum[k]=∑jx=imat[x][k]枚举行i,j , sum[k]=\sum_{x=i}^{j}mat[x][k] 则对sum[]求一遍最大字段和即可得到最大子矩阵则对sum[]求一遍最大字段和即可得到最大子矩阵这里同理,令minVal[k]=min(mat[x][k]|i<=x<=j)这里同理,令minVal[k]=min(ma
2017-09-23 22:29:41
1057
原创 Codeforces862 E. Mahmoud and Ehab and the function
传送门sumA=∑ni=1(−1)i−1aisumA=\sum_{i=1}^{n}(-1)^{i-1}a_i sumB[j]=∑ni=1(−1)ibi+jsumB[j]=\sum_{i=1}^{n}(-1)^ib_{i+j} 显然f(j)=|sumA+sumB[j]|f(j)=|sumA+sumB[j]|对每次更新[l,r,x][l,r,x] 显然只有(r−l+1)%2==1时,sumA才会改
2017-09-20 22:55:49
349
原创 Codeforces862C. Mahmoud and Ehab and the xor 【构造】
传送门不难发现只有n=2,x=0时才输出NO 特判n=1,2时 当n>=3: 令xorSum=1^2^3^….^(n-3) t=x^xorSum 则可以构造出: t!=0:1,2,3,....(n−3),t+(1<<18),(1<<18),0t!=0 : 1,2,3,....(n-3),t+(1<<18),(1<<18),0 t==0:1,2,3,...,(n−2),(1<<18),[
2017-09-20 22:42:58
378
原创 HDU6208The Dominator of Strings 【AC自动机】
传送门显然只有长度最长的串才可能是答案 若有2个串长度最长 且不相同 无解建立ac自动机,若存在>=2个深度最大的节点 无解 用最长的串跑一遍查询,如果能匹配到的串恰好有n个 答案就是该串#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair
2017-09-19 23:40:56
393
原创 HDU6215 Brute Force Sorting 【模拟】
传送门显然 当[l,r]被删除后,下一轮可能删除的位置必定是从l-1或r+1开始 每删除一个值,将其左右边的值放进队列,用一个数组标记是否被删除过,避免重复操作即可#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair<ll,ll>#defi
2017-09-19 23:26:46
576
原创 HDU6214 Smallest Minimum Cut 【最大流求最小割边】
传送门因为最大流=最小割边的最大流量限制之和 因为m<=1000 将每条边流量*2000+1 跑出来的最大流%2000=最小割边数量#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair<ll,ll>#define MEM(a,x) me
2017-09-17 20:21:28
377
原创 Codeforces853B. Jury Meeting
传送门预处理出所有人在第i天之前到达0所需要的最小花费sumT0[] 以及 所有人在第j天后回去所需要的最小花费sumF0[]枚举开会时间i 则ans=min(sumT0[i−1]+sumF0[i+k]ans=min(sumT0[i-1]+sumF0[i+k]#include<stdio.h>#include<bits/stdc++.h>#define ll long long#defin
2017-09-15 22:03:56
373
原创 51NOD1799 二分答案 【组合+分块打表】
传送门显然确定了2分的结果下标,模拟一下即可得到途经的所有mid 记录a[mid]>m 和 a[mid]<=m的mid数量分别为larger,samller ans=Clargern−m∗(larger!)∗Csmallerm∗(smaller!)∗[(n−larger∗smaller)!]ans=C_{n-m}^{larger}*(larger!)*C_m^{smaller}*(smaller
2017-09-15 12:01:16
440
原创 51NOD 1294 修改数组 【LIS】
传送门a[i]=a[i]-i 则不难发现 对a[i]中>=0的元素 求一遍单增子序列(非严格) 答案就=n-lis#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define lowbit(x) ((x)&(-x))using namespace std;const int N = 1e5 +5 ;int b[N
2017-09-14 17:14:57
337
原创 51NOD1681 公共祖先 【dfs序+树状数组】
传送门 首先求一遍树1的dfs序,线段树维护数组c[i] dfs遍历树2 当进入u点时 ①: subNum=∑out[u]i=in[u]c[i]① :\ subNum=\sum_{i=in[u]}^{out[u]}c[i] ②: c[in[u]]+=1②:\ c[in[u]]+=1 ③: 遍历u的所有孩子③:\ 遍历u的所有孩子 ④: 以u为树根的2个子树包含的公共点数=∑out[u]i
2017-09-14 16:58:15
312
原创 51NOD 1158 全是1的最大子矩阵
传送门很像最大子矩阵和 枚举子矩阵在第i行到第j行,sum[k]=∑jia[i][k]枚举子矩阵在第i行到第j行,sum[k]=\sum_i^ja[i][k] 当sum[k]!=j−i+1时,子矩阵不全为1当sum[k]!=j-i+1时,子矩阵不全为1 构建数组b[k]=(sum[k]==j−i+1?1:−inf)构建数组b[k]=(sum[k]==j-i+1?1:-inf) 则对b[k]求
2017-09-12 21:05:07
331
原创 HDU6203 ping ping ping 【LCA+BIT】
传送门先求dfs序in[]和out[],以及lca 将不能连通的(u,v)按lca深度从大到小排序 树状数组维护数组flag[] flag[ini]=0:i点与任意{v|flag[inv]=0}连通flag[in_i]=0 : i点与任意\{v|flag[in_v]=0\}连通 flag[ini]>0:i点与任意{v|flag[inv]=0}不连通flag[in_i]>0 : i点与任意\
2017-09-12 16:19:50
297
原创 51NOD 1210 矩阵查询 【线段树/树状数组】
传送门对每列建区间线段树直接肛过去#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair<ll,ll>#define MEM(a,x) memset(a,x,sizeof(a))#define lowbit(x) ((x)&-(x))usin
2017-09-08 19:23:12
482
原创 51NOD1337 翻转游戏 【贪心】
传送门显然当没有′?′时,模拟一遍即可显然当没有'?'时,模拟一遍即可 当位置i是′?′时,如果后续的关卡中,位置i需要关灯,且当前关卡必须关掉一些灯,则顺手关掉当位置i是'?'时,如果后续的关卡中,位置i需要关灯,且当前关卡必须关掉一些灯,则顺手关掉 开灯也同理开灯也同理#include<stdio.h>#include<bits/stdc++.h>#define ll long long
2017-09-06 21:41:40
371
原创 51NOD1495 中国好区间 【尺取法】
传送门尺取法求[i,j]区间,使得[i,j]区间size>=k且>=T的数恰好有k个,于是[1,j],[2,j],[3,j],….,[i,j]都满足题意,以j结尾有i种方案#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair<ll,ll>#d
2017-09-06 21:05:12
324
原创 HDU6166 Senior Pan 【Dijkstra】
链接老年选手,脑洞真心跟不上啊k个点,可以分为2个集合s1,s2 显然dijkstra一遍即可得到s1到s2的最小距离考虑枚举2进制的每一位 若第i位=1,则分进s1,否则分进s2 显然所有不同的pair组合都被包含了#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>
2017-08-22 19:18:52
1020
原创 HDU6134 Battlestation Operational 【莫比乌斯】
链接设g(n)=∑ni=1∑ij=1ceiling(ij)设g(n)=\sum_{i=1}^n\sum_{j=1}^{i}ceiling(\frac{i}{j}) g(n/3)=∑n/3i=1∑ij=1ceiling(ij)=∑n/3i=1∑ij=1ceiling(3i3j)g(n/3)=\sum_{i=1}^{n/3}\sum_{j=1}^{i}ceiling(\frac{i}{j})=\sum
2017-08-18 21:19:29
324
原创 HDU6143 Killer Names 【数学+组合】
f(n,m)=n长度,恰好使用了m种字母的方案数f(n,m)=n长度,恰好使用了m种字母的方案数 f(n,m)=mn−∑m−1i=1[Cimf(n,m−i)]f(n,m)=m^n-\sum_{i=1}^{m-1}[C_m^if(n,m-i)] 考虑name1使用了i种字母,name2使用了j种字母考虑name_1使用了i种字母,name_2使用了j种字母 则有f(n,i)∗f(n,j)∗Cim
2017-08-18 19:46:49
328
原创 HDU6118 度度熊的交易计划 【费用流】
链接百度之星的时候脑抽了… 跑了n次Dijkstra求了个全源最短路 拆点 i和j′的费用为cj−ai−disi,ji和j'的费用为c_j-a_i-dis_{i,j} S到i,流量为bi,费用为0, i′到T流量为di,费用为0S到i,流量为b_i,费用为0,\ i'到T流量为d_i,费用为0 这样边数2n2,TLE到爆这样边数2n^2,TLE到爆正解...直接按输入建图即可,拆点都不需要.
2017-08-14 14:30:33
1559
原创 HDU6108 小C的倍数问题 【脑洞】
链接证明:p进制下,当且仅当,x每位之和为B的倍数时,x%B=0证明:p进制下,当且仅当,x每位之和为B的倍数时,x\%B=0设x=k0+k1p+k2p2+...+knpn设x=k_0+k_1p+k_2p^2+...+k_np^n 若(k0+k1+...+kn)%B=∑ni=0ki%B=0若(k_0+k_1+...+k_n)\%B=\sum_{i=0}^nk_i \%B=0 又因为x=∑ni=0
2017-08-12 23:15:05
536
原创 HDU6109 数据分割 【并查集+启发式】
传送门显然,维护xi=xj的情况,并查集即可显然,维护x_i=x_j的情况,并查集即可 而xi!=xj时,可以开一个1e5的set<int>数组,记录xi不等于的数而x_i!=x_j时,可以开一个1e5的set<int>数组,记录x_i不等于的数xi=xj约束x_i=x_j约束 ①检查是否满足xi!=xj : 遍历较小的set的元素t,满足un.find(t)==un.find(xi)则不成立
2017-08-12 22:36:02
877
原创 HDU2222 Keywords Search 【AC自动机模板题】
链接AC自动机一直搜即可 注意每次+end[i]后,需要把end[i]=0,避免重复计算#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair<ll,ll>#define MEM(a,x) memset(a,x,sizeof(a))#def
2017-08-09 20:50:15
328
原创 【2017多校】HDU6085 Rikka with Candies
传送门考虑枚举k,此时只有bj>k,ai>=k,才可能满足ai%bj=k考虑枚举k,此时只有b_j>k,a_i>=k,才可能满足a_i\%b_j=k bbi={i的>k的因子属于b[1...m]的个数}bb_i=\{i的>k的因子属于b[1...m]的个数\} 此时余数为k的情况数=∑ni=1bbai−k此时余数为k的情况数=\sum_{i=1}^{n}{bb_{a_i-k}} 考虑用bits
2017-08-09 17:27:44
1263
原创 【2017多校】HDU6092 Rikka with Subset 【DP】
传送门令xi=sum和为i,且不包含>=i的数的集合的数量令x_i=sum和为i,且不包含>=i的数的集合 的数量 则numi=A[1...n]中等于i的数个数=Bi−xi则num_i=A[1...n]中等于i的数个数=B_i-x_i 于是,m为背包大小,numi为物品个数,每个物品体积=i,dpj=体积为j时方案数,求背包即可于是,m为背包大小,num_i为物品个数,每个物品体积=i,dp_j
2017-08-08 20:03:27
408
原创 POJ2914 Minimum Cut 【全局最小割Stoer-Wagner模板题】
题目链接显然裸的全局最小割//O(n^3)#include<stdio.h>#include<iostream>#include<algorithm>#include<stdlib.h>#include<string.h>//#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll
2017-08-05 21:41:06
700
原创 【2017多校】HDU6058 Kanade's sum 【链表】
题目链接枚举1到n,当i是第k大时,区间左端点到右端点 比i大的数必须=k-1个 将a[1..n]放链表里,枚举完i,则将i删去,则链表中所有元素都>当前枚举的数,O(k)即可统计出区间个数#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair
2017-08-03 12:01:39
392
原创 玲珑OJ 1149 - Buildings 【尺取法】
题目链接<\a>显然通过尺取法可以找到每次以j为结尾,包含j的区间,往左延伸,最左能到i (i<=j) 于是以j为结尾的区间有(j-i+1)个 累加即可#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair<ll,ll>#define ME
2017-07-30 15:09:42
422
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人