
杂题
文章平均质量分 67
zjck1995
这个作者很懒,什么都没留下…
展开
-
面试题目:2个鸡蛋100层楼问题
一道非常经典的面试题目,给你两个鸡蛋,在一幢100层的大楼里面,至少扔几次可以测出让鸡蛋破碎的临界高度?最朴素的做法是从100层一直扔到1层,不过这样明显不是最优的。这题目其实可以转化为dp求解,假设有n层,你随机选了一层x,如果鸡蛋碎了,那么你只剩一个鸡蛋了,为了确保能够找到临界高度,你不得不从x层往下一层一层扔剩下的一个鸡蛋。如果没碎呢,你还剩2个鸡蛋,但你已经用了一次测试机会。这时候的次数应该原创 2016-09-30 00:16:43 · 6178 阅读 · 0 评论 -
hdu1403 求最长公共前缀 后缀数组
#include#include#include#include#include#include#include#include#includeusing namespace std;#define rep0(i,n) for(int i=0;i<n;i++)#define rep(i,j,k) for(int i=j;i<k;i++)const int N=2e5+10;原创 2015-09-01 16:26:54 · 834 阅读 · 0 评论 -
hdu3518 后缀数组的height应用
height[i] 表示 排第i的子串和第i-1的子串的最长公共前缀,对于某一个长度k,如果存在连续一段height值大于等于k且起始位置的最远距离大于等于k,这一段就存在一个解,ans加1#include#include#include#include#include#include#include#include#includeusing namespace std;#原创 2015-09-02 11:04:28 · 372 阅读 · 0 评论 -
codeforce Bubble Cup 8 - Finals G Run for beer
每经过一个城市速度会慢十倍,每个城市的距离是0---9,要求从0到n-1时间最短,时间相同的情况下,经过城市最少,输出时间,经过城市,还有路径首先从n-1bfs搜索所有的含有前导0的城市,再从0点bfs搜索到有前导0的城市中距离最短的长度len,再从所有长度为len且还有前导0的城市开始bfs,每次找一条最短的边,直到0点#include const int N=2e5+10;usin原创 2015-09-09 20:05:57 · 716 阅读 · 0 评论 -
hdu4474 bfs搜索
跟巧妙的一道题目,问n的最小的一个倍数,该倍数不含有任意给定的数位中的数字 N是1万,bfs可用的数位,每次只要考虑模N是否存在即可,最多搜素N次,非常巧妙的减枝#include#include#include#include#include#include#include#include#includeusing namespace std;const int N=1原创 2015-08-19 00:33:56 · 352 阅读 · 0 评论 -
hdu5313 求构成完全二分图需要的最多的边数 染色+背包求最小差异
首先通过0,1染色找到联通分支,保存左右两边的差值,然后使左右两边的节点数目尽可能相差尽可能的小,用背包 (容量为sum/2) 求最小差异 ,这时边数最多,967MS险过#include #include#include#include#include#include#include#includeusing namespace std;const int N=1e4+10;原创 2015-07-29 15:08:41 · 742 阅读 · 0 评论 -
hdu5305 线上朋友和线下朋友(dfs暴力)
#pragma comment(linker, "/STACK:102400000,102400000")#include #include#include#include#include#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1 | 1#define lowbit(x) x&(原创 2015-08-02 21:56:31 · 339 阅读 · 0 评论 -
hdu5323 给出左右边界,求出线段树最小的大小(暴力dfs搜索)
#pragma comment(linker, "/STACK:102400000,102400000")#include #include#include#include#include#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1 | 1#define lowbit(x) x&(原创 2015-08-02 21:24:37 · 499 阅读 · 0 评论 -
hdu5338 贪心+线段树+二分+树状数组
位置x要么放x+1位置的值,要么找到前面没有循环节中最大的一个值,判断最左边的非寻环节的位置用树状数组+二分,找最大值用线段树维护#pragma comment(linker, "/STACK:102400000,102400000")#include #include#include#include#include#include#include#include#defin原创 2015-08-02 11:22:13 · 469 阅读 · 0 评论 -
hdu5340 一个字符串能否分解为3个回文串(暴力枚举)
#pragma comment(linker, "/STACK:102400000,102400000")#include #include#include#include#include#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1 | 1using namespace std;原创 2015-08-02 10:03:49 · 912 阅读 · 0 评论 -
hdu5339 最小模几个数字可以为0(枚举)
#pragma comment(linker, "/STACK:102400000,102400000")#include #include#include#include#include#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1 | 1using namespace std;原创 2015-08-02 09:33:00 · 361 阅读 · 0 评论 -
hdu4415 贪心好题
刺客杀人使用自己的刀需要消耗一定的耐久度,或者用杀人得到的刀,问用尽可能少的代价杀尽可能多的人首先,如果杀了一个有刀的人,最优解中有刀的人全部被杀完证明: 假设最优解中杀了x,不杀y,那么杀了x后再杀y并不会使得自己的刀的数量有所减少,这种情况还多杀了一个人,则这个不是最优解,矛盾了将结果分为两种,一是只杀没有刀的人,排序从小到大杀即可二是杀了有刀的人,根据上面的结原创 2015-09-07 16:06:23 · 792 阅读 · 0 评论 -
hdu5301 填满房间最大的矩形的最小值
首先使房间的行数n#pragma comment(linker, "/STACK:102400000,102400000")#include #include#include#include#include#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1 | 1#define lo原创 2015-08-04 11:23:46 · 577 阅读 · 0 评论 -
hdu5317 素数筛预处理
F[x] 表示x的素数种类数,求max (GCD(F[i],F[j])) i,j在区间L,R里面#include #include#include#include#include#include#include#includeusing namespace std;const int N=1e6+10;const int MAXN=(1<<31)-1;int INF原创 2015-07-28 21:16:32 · 555 阅读 · 0 评论 -
hdu4126 MST修改边后的期望值 树形dp 好题
#pragma comment(linker, "/STACK:102400000,102400000")#include #include#include#include#include#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1 | 1#define lowbit(x) x&(原创 2015-08-06 10:34:11 · 495 阅读 · 0 评论 -
hdu3966 树链剖分入门题
#include #include #include #include #include #include #include #include #include #include #include #include const int N=50010;const int INF=1e9+10;int n,m,Q;int num[N];int head[N];int原创 2016-02-14 19:35:42 · 365 阅读 · 0 评论 -
hdu5486 离散化+并查集
#include#include#include#include#include#include#include#includeusing namespace std;#define rd(x) scanf("%d",&x)#define rdd(x,y) scanf("%d%d",&x,&y)#define rddd(x,y,z) scanf("%d%d%d",&x,&y,原创 2015-09-27 18:54:52 · 756 阅读 · 0 评论 -
hdu 4885TIANKENG’s travel bfs
TIANKENG’s travelTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 346 Accepted Submission(s): 85Problem DescriptionTIANKENG ha原创 2014-07-29 10:44:29 · 788 阅读 · 0 评论 -
hdu5245 求期望
对每个各自进行讨论它k次操作后选中的概率 ,为1-每一次选不中的概率的k次方,各个格子相加即可#include #include#include#include#include#includeusing namespace std;const int N=1000005; int T,n,m,k; int cas=1;int main(){#ifndef ONLINE原创 2015-07-24 20:01:14 · 430 阅读 · 0 评论 -
hdu 5392 许多数的lcm的取模
算出每个循环块的长度,直接相乘肯定是不行的,需要分解质因数,每个因子取每次分解出来数量的最大值,然后用下快速幂优化下乘法就好了,比赛时脑子短路了,一直wa#include#include#includeusing namespace std;const int N=3e6+10;const long long MOD=3221225473;int n;int a[N];bool原创 2015-08-16 15:46:45 · 856 阅读 · 0 评论 -
hdu 4547 CD 最近公共祖先lcm (dfs+rmq)
问从一个目录到另一个目录的最短cd cd..次数#include#include#include#include#include#include#include#include#includeusing namespace std;const int N=1e5+10;int n;int E[2*N],R[N];int t=0;map mp;vector vec[原创 2015-08-18 10:25:59 · 541 阅读 · 0 评论 -
hdu5381 gcd的和(莫队算法+每一次log(a)的更新)
学习了下莫队算法,用左端点所在块分割排序排序后,设n是区间范围,每个块n^0.5的大小,对于右端点R的更新,同一块内,R是从小到大,O(n)*块数=O(n^1.5),相邻块O(n)*块数=O(n^1.5)对于左端点的更新,同一块内,每次最多 O(n^0.5),不同块,最多2*n^0.5次,一共*m次询问大概加一下是O(n^1.5)的复杂度,这个题目是n=m是10000,大概是100万的原创 2015-08-17 16:42:42 · 498 阅读 · 0 评论 -
hdu1711 kmp入门
#include#include#include#include#include#include#include#include#includeusing namespace std;const int N=1e4+10;const int MOD=1e9+7;int n,m,k;int a[1000005],b[N];int nex[N];void getnex()原创 2015-08-19 23:59:30 · 334 阅读 · 0 评论 -
hdu1251 tire树入门
#include#include#include#include#include#include#include#include#includeusing namespace std;const int N=1e4+10;const int MOD=1e9+7;int n,m,k;struct node{ node* child[26]; int cnt;原创 2015-08-20 10:14:10 · 366 阅读 · 0 评论 -
hdu 5384 第一次写AC自动机
AC自动机算是kmp的升级版,第一次写这个,感觉很有收获#include#include#include#include#include#include#include#include#includeusing namespace std;const int N=1e5+10;const int MOD=1e9+7;int n,m,k;char *str[N];ch原创 2015-08-21 16:52:57 · 381 阅读 · 0 评论 -
hdu5416 树上XOR
给一个s,问一棵树上两点间的路径的亦或值等于s的有几种情况,主要有一个公式 f(1,u)^f(1,v)=f(u,v),另外特判下s==0的情况#include#include#include#include#include#include#include#include#includeusing namespace std;#define rep(i,n) for(in原创 2015-09-01 15:04:54 · 421 阅读 · 0 评论 -
hdu5491 位操作
给一个整数D,求比D大的且二进制含有1的个数在s1---s2之间的最小的整数从高位往低位找D二进制中第一个从0到1的那个位,之后就尽可能地把剩下的1全部填在低位上,然后所有情况中取个最小值#include#include#include#include#include#include#include#includeusing namespace std;#define r原创 2015-09-29 12:19:56 · 392 阅读 · 0 评论 -
hdu1512 左偏树(可并堆)
#include <iostream>#include <cstring>#include <cstdio>#include<cmath>using namespace std;const int N= 1e5+10;typedef long long LL;struct node{ int l,r,dis,val,dad;}heap[N<<2];inline int max(原创 2017-01-02 16:52:13 · 611 阅读 · 0 评论