- 博客(11)
- 收藏
- 关注
原创 hdu5371
这道题目当时做的时候先用manacher处理过,但是之后的求法太有问题了,所以一直WA。 我们可以发现,题目中所给的三部分,其实就是两个回文子串,我们这样定义这个N-sequence 。。。i。。。j。。。,把i当做第一个回文子串的中心(用mancher处理过后,相当于这里是另外新加的一个数字),j为第二个回文子串的中心,那么我们先将i+p[i] (p[i]为以i为中心的回文子串半径),那么从i
2015-08-12 17:24:56 589
原创 hdu5375
我们用dp[i][j]来表示第i为数字为j时我们所能得到的最大的值。 那么初始化时我们得将所有的dp[i][j]=-INF 如果第一个字符为’?’或者’1’,那么dp[0][1]=a[0]; 如果第一个字符为’?’或者’0’,那么dp[0][0]=0; 那么在循环里面,也是这样分类 假设第i个字符为’?’或者’1’,那么我们就取dp[i-1][1]和dp[i-1][0]+a[i]这两者之间
2015-08-12 16:37:11 272
原创 hdu5373
当初做这道题时犯了一个致命的错误。。那就是我一直认为求digit sum就是对9取余。但这道题目不一样,它不要求将digit sum化为一位数,也就是如果当初的数是88,那么digit sum是16,而不是对9取余的7。。 然后还要知道一个数如果能被11整除,它的特点是 奇数位上的和-偶数位上的和能被11整除。 这里是一个链接,列举了一些能被1,2,3……11等整除的数的特征: 整除-百度百
2015-08-12 14:43:05 522
原创 hdu5355
这题比赛的时候好像spj写挂了,所以导致我当时那个很挫的代码都过了,其实没那么简单。 首先,我们来讨论不可能的情况: 1.一共有n个数,那么1-n的总和 sum = (1+n)*n/2,如果sum不能整除m,那么输出NO; 2.令each = sum/m,这是每个组的总和。我们知道,1-n我们都得用,所以假设each<n,那么这也是无解的,输出NO; 接下来就是有解的情况,我们通过以下的方法
2015-08-11 22:37:40 519 3
原创 hdu5348
题目大意就是有n个点,m条无向边,现让你将这m条无向边改为有向边,使得每个点的|入度-出度|v,0代表v-->u。逐点逐边搜索即可。如果对于某个点u,它的入度in[u]>=出度out[u],那么就正向搜索,我们找一个与u相连且不等于u的点v,假设点v的in[v]时间复杂度为O(n+m),要达到这个效率,我们用链式向前星来存储边,然后用head[u]=edge[i].next来删除已经访问过的边。但
2015-08-09 13:02:55 364
原创 hdu5365
真的是,看了题解,感觉智商被完爆了。。 其实当时在判断正三角形的时候我就觉得如果坐标都是整数的话不太可能,结果也没细想,原来只有正四边形才能保证坐标都是正整数。。 知道这个就好啦,枚举四个点,判断能否构成正四边形即可。#include<stdio.h>#include<iostream>#include<string>#include<string.h>#include<algorith
2015-08-09 11:45:03 525
原创 hdu5353
这道题目因为围成的是一个圈,所以直接模拟的话情况会比较复杂,我们将环分割出来,成为一条直线,那么就比较好模拟。 怎么分割那?我们只要枚举0号和n-1号这两个人之间的交易即可。 由题目可知,有三种交易: 1。什么都不做 2。0号给n-1号一个糖果 3。n-1号给0号一个糖果 枚举之后,我们就可以根据此时的状况来进行模拟,对于相邻的i和i+1来说,如果i的数目不足平均数,那么从i+1那里拿,
2015-08-07 23:32:17 407
原创 hdu5358
参照别人代码写的(感谢)。原题中,我们看到那个式子的时候,应该想到,我们得枚举2的幂次,然后再求在那个区间内i+j的总和。一共有10^5个数,每个数最大为10^5,所以我们枚举到2^34即可。至于在求区间内i+j的总和时,我们之前用sum[]来记录数组的前缀和,然后枚举每个点i,用指针l和r来求得满足sum[i~l]>=L且sum[i~r]<R ,L和R是为2^(k-1)和2^k,由题意可得,
2015-08-07 17:33:59 635
原创 poj3061,3320
poj3061: 此题是求一个序列中使得和不小于s的最短子串的长度。 这里介绍一种方法,叫做尺取法,效率为O(n),只需要遍历一遍数组即可。 我们引入sum代表当前的和,st代表子串的开始位置,t代表符合条件的子串的结尾位置,那么长度就是 t-st.#include<stdio.h>#include<iostream>#include<string>#include<string.h>
2015-08-07 16:39:09 261
原创 搜索专题解题报告
1001:简单模拟题#include<stdio.h>#include<iostream>#include<string>#include<string.h>#include<algorithm>#include<iomanip>#include<vector>#include<time.h>#include<queue>#include<stack>#include<itera
2015-08-05 21:47:40 366
原创 hdu5304
BC的题出的真的太木有层次了。。让我这种渣渣怎么活。。不知道以后有dv1,dv2后会不会有所改善。。 首先,要求出所有的回文子串,因为子串长度最大为20w,所以我们得用接近线性的方法来求才行。此时,Manacher算法就派上了用场。它能以O(n)的效率求出以每个字符为中心的最长回文子串的长度。 Manacher具体的思想还是不难懂的,只要好好参悟下,给个链接:http://blog.sina.c
2015-08-03 17:21:55 642
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人