- 博客(10)
- 问答 (2)
- 收藏
- 关注
原创 HDU6170【DP+树状数组+差分维护】
哦,这题我1A诶,好开心啊,写个题解嘛先预处理一下第二个串,预处理出每个位置字母相同的最远位置。然后大力DP! 分成s串(1串),p串(2串),dp[i][j]代表从p串位置1-i能否匹配s串1-j,然后需要维护就是对于”*”,因为p串的第 i 个字符作用还可以匹配位置 j 后面的元素,不能再枚举一层,考虑前缀和,然后用树状数组差分即可~具体细节见代码注释~Thanks for watching!
2017-08-22 18:28:33 571
原创 Codeforces838A【枚举素数暴力】
思路: 1. 小的边如果能组成大的,那肯定小的比大的优。所以枚举素数即可。(有367左右) 2. 复杂度分析,每次枚举的就是n*m/len,即n*m/2+n*m3+n*m/5…均摊下来应该是 O(n2)O(n^2) 的.Code:#include<bits/stdc++.h>using namespace std;typedef long long LL;#define mem(a, b)
2017-08-20 22:23:56 390
原创 HDU4358【离散化+DFS序+莫队算法】
思路: 这个DFS序还是蛮有意思的~然后就可以把以u为根的树的状态直接转化到区间(一维数组)上,而且数组是不大的。 然后就变成了区间处理,套一下莫队就好了。 Code:#include<bits/stdc++.h>using namespace std;typedef long long LL;#define mem(a, b) memset(a, b, sizeof(a))const
2017-08-20 14:12:59 491
原创 POJ3461【1e6 字符串 hash模板】
两种hash方法(双hash…算了吧,除非字符串很短,然后又wa了才用)方法1: unsigned long long hash[N]; 定义一个unsigned long long类型的变量,它的范围是在[0, 2^64) 内,这就相当于,当数超不过2^64-1后,它会溢出!这就相当于一个数模2^64的过程。 那么hash函数可以理解为: hash[i]=(hash[i−1]×p+s[i]
2017-08-15 10:04:00 493
原创 Codeforces 587C【树上倍增】
题意: 求树上两点路径中的前 a(<=10) 小的点权值。 思路: 类似LCA倍增算法来存储 i -> 2^j 路上的 前(<=10)小个 的点权值。 然后要写一个权值合并>>> 具体求 u->v 的话,就是先分别计算 {u->LCA} 和 {v->(LCA-1)} (减1是LCA会重叠), 然后再合并,输出答案。#include<iostream>#include<cstdio>#i
2017-08-12 09:31:38 572
原创 Codeforces 739B【树上倍增+差分】
思路: 先膜一发,真是羡慕施老板不知道差分也会自己创造差分的能力。 差分(这里的小差分): 比如你要算一棵树上 u->v 路径上的次数, v是 u 子树上的一个点, 算一棵树上 u->v 路径上的次数 就相当于算每个节点的次数吧, 对于每一对u, v (u -> v)的,用C[i]计数,可以C[fa[ u ]]–, C[fa[ v ]]++, 然后跑一下DFS,统计次数,具体处理就是对于每
2017-08-09 22:39:04 638
原创 Codeforces 794C【贪心】
一开始以为计数n*26的算法很优秀哦?后面确实还是优秀的;对于1串只会取前(n+1)/2个字符,对于2串只会取n/2个字符(都是整除),然后每次拿1串的最小和2串的最大比一比,对于填1串,如果最小<最大,字典序越小,小的放最前,不放最前会被挤掉,如果最小>最大,字典序越小,大的放后面,然后2串的更大的放前面;对于填2串,如果最小<最大,字典序越大,大的放最前,不放最前会被挤掉,如果最小>最大,字典序
2017-08-07 21:03:40 405
原创 Codeforces Gym-101161E【LCA+主席树】
思路: 在这棵树上,对于每个节点u存一下从根节点(默认为1) 到 u 路径上所有线段出现的次数,那么用主席树维护所有历史信息,然后计算任意两个特定节点u, v的所有线段次数:num[线段树(u)] + num[线段树(v)] - 2 * num[线段树(LCA(u, v))],然后对于每次询问询问主席树就好了,就是求区间中位数了嘛代码来源:http://www.cnblogs.com/fightf
2017-08-06 15:12:25 431
原创 Codeforces 835D【暴力】
可以DP,也可以暴力判这个串是不是1,2,3….-回文串,判回文可以hash,也可以预处理判长度#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 5005;char s[N];int n;int ma[N], mb[N];int init_Odd(int x){ int an
2017-08-01 21:55:45 1065
原创 Codeforces460C【二分+线段树】
二分最小值,如果你能实现这个最小值是可以实现的,那么一定是最优的,因为每次区间+1,原来存在的最小值的个数还是存在的,但是新的可能会多起来,所以最小值递增还是最优到最优的;考虑如果不能实现这个最小值,那么他一定是比之前这个值少的,因为最小值不变,而且个数变少;区间维护可以线段树。#include <bits/stdc++.h>using namespace std;typedef long lo
2017-08-01 21:52:58 511
空空如也
解高次方程,除二分法
2016-01-22
C语言memset函数赋0问题
2015-11-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人