- 博客(19)
- 收藏
- 关注
原创 刷题记录-luoguP2679 子串
f[i][j][k]表示用A前i个字符且必选A[i]来匹配B前j个字符,分成k段 状态转移方程: f[i][j][k]=f[i-1][j-1][k]+∑(p=j-1~i-1)f[p][j-1][k-1] 发现f[p][j-1][k-1]可以边转移边计算,于是时间复杂度O(n*m*k) 开过滚动之后空间也是可以的。 边界不大好想,转移的细节也有不少,真的要注意了 #include #
2017-09-21 00:43:18 270
原创 刷题记录-P2312 解方程
题目链接:https://www.luogu.org/problem/show?pid=2312 这题一开始是这么考虑的:如果f(x)!=0,那么f(x)%k一定也不等于0 这样可以进行检验,选取若干个k使得解的范围缩小, 最后用高精度一一进行验证。 70分 #include #include #include #include #include #define MAXN 105 #de
2017-09-18 00:42:24 473
原创 计蒜客 2017 NOIP 提高组模拟赛(二)Day2
T1:劫富济贫 这题一开始hash做的,超时 #include #include #include #include #include #include #define MAXN 3000005 #define MOD1 12000017 #define MOD2 15000127 #define ll long long #define pii pair using namespace
2017-09-17 11:49:51 1296
原创 NOIP 2014 D1T3 飞扬的小鸟
这题一开始毫无头绪,后来发现抽象成模型后并不是很复杂 向上飞就是完全背包,向下飞就是01背包 但是细节方面还是比较麻烦,dp的程序好想好写不好AC 比如说:向右飞的过程中做完全背包,必须是0~m一起做,是一个整体 不能只做非墙的部分 还是得深思熟虑啊ToT #include #include #include #include #define MAXN 10005 #define MA
2017-09-13 00:55:45 275
原创 计蒜客 2017 NOIP 提高组模拟赛(一)Day1
T1:蒜头君打地鼠 当时用树状数组求和的,效率并不是很高,但也能过一部分数据,其实暴力用前缀和优化下似乎可以AC。 正解是矩阵旋转+二位前缀和。 #include #include #include #include #include #define MAXN 2005 #define pii pair using namespace std; int n,k; int dat[MAXN
2017-09-12 00:35:47 399
原创 计蒜客 2017 NOIP 提高组模拟赛(一)Day2
转送门 T1:蒜头君的兔子 首先考虑暴力算法:用数组完全模拟,作为对拍程序: #include #include #include #include #define MOD 1000000007 #define ll long long using namespace std; int n; ll a[15],b[15]; int main() { scanf("%d",&n
2017-09-09 23:21:55 366
原创 刷题记录-luoguP2149 [SDOI2009]Elaxia的路线
这题只需抓住两条性质; 1) 不会出现上图情况,原因:两点之间,如果走最短路,那么一定是尽量走相同的路径 所以我们可以记录在两人最短路中的共同部分,找到形成最长的一条链,并且是单向边组成的链 2) 不会出现这种情况,即共同走过一段路后不可反向,原因:不符合最短路 所以考虑面对面走过的情况时,只需将其中一人的边反向即可 ===============================
2017-08-06 17:40:18 351
原创 刷题记录luoguP1972 [SDOI2009]HH的项链
这题是典型的区间处理问题 由于数据规模,我们可以采用离线操作:先将询问区间保存下来,对区间进行合理的排序,便于降低复杂度 然后采用合适的算法 (1)树状数组 我们可以给相应元素一个权值1,用树状数组计算sum, 但这题显然一般的计算是行不通的, 考虑到区间的有序性,我们以区间左端点排序, 然后依次处理,这样对于区间i+1左端点一定不会在区间i左端点之前 那么我们处理到区
2017-07-29 07:46:09 189
原创 刷题记录-luoguP2055 [ZJOI2009]假期的宿舍
对于学生和床,可以看成是二分图,让尽可能多的学生能睡到床上,可以看成二分图的最大匹配 对于本校学生,自己可以睡自己的床和认识的人的床,我们连一条边 对于外校学生,可以睡认识的人的床,我们连一条边 然后跑一边匈牙利算法就AC啦 ********************************************* #include #include #include #inclu
2017-07-20 16:22:57 250
原创 刷题记录luoguP1983 车站分级
这题一开始没什么思路,想到车子途中没走过的地方的等级,肯定小于车子走过的地方的等级。 于是我就企图让没走过的地方的等级最大值+1去更新走过地方的等级,于是开了线段树, 由于一遍还不能过,因为后来的车子更新的值会影响到前面的,于是反复辗转~~~悲惨超时。。。 ************************************************* 这题的正解是拓扑排序,由于 车子
2017-07-16 15:43:55 268
原创 刷题记录-codevs2144 砝码称重 2
典型的折半枚举法 本质上是用空间换时间的思想,把一半的数据搜过之后用数组保存起来, 搜另一半的时候就可以直接使用了 这样就可以把时间复杂度由乘转变为和 效率改善非常大哦 ************************************* #include #include #include #include #include #include #define MAXN 35
2017-07-16 11:00:18 270
原创 刷题记录-codevs1553 互斥的数
这题一开始我的思路是用图论做, 首先建立一个图,每个数都作为节点, 对于每个数n,如果存在n*p,那么就从n节点向n*p节点连一条边, 由于每个数n要么不存在n*p,要么只存在一个n*p(集合元素只有一个啦) 所以最后得到的图,一定是若干个不连通的链, 对于每个链来说,不妨设为a1,a2,a3……,an 那么肯定是a1与a2互斥,a2与a3互斥,……,an-1与an互斥。 对于不
2017-07-16 10:14:36 206
原创 刷题记录-luoguP1525 关押罪犯
这题我采用的方法是二分答案,二分边的长度D, 注意左边界是0开始的,因为可能不会发生冲突。 然后难点就是check函数判断相应的长度是否可行, 我的思路是这样的: 如果可行的话,那么长度大于D的边两个节点,肯定会被分在两个集合里面, 从而想到了二分图:新建一个图,只保存原图中大于D的边,然后判断是否是二分图即可。 二分图判断可以用深搜染色,效率是O(|V|+|E|) 我用的是并查
2017-07-14 22:07:54 251
原创 刷题记录-luoguP1801 黑匣子_NOI导刊2010提高(06)
本题主要就是找第k小的数 可以建一棵二叉搜索树,设节点左子树的个数为size,则有: 如果k==size+1,那么显然这个节点就是第k小的数 如果k 如果k>size+1,那么k肯定在右子树中,且为右子树中第k-1-size小的数。 ********************************** #include #include #include #include #inc
2017-07-12 22:45:20 287
原创 刷题记录-luoguP1631 序列合并
把a数组分成n部分,对于每个a[i]都看成加上整个b数组。 比如样例: 3 2 6 6 1 4 8 可看成 2-> 1 4 8 6-> 1 4 8 6-> 1 4 8 设c[i]为当前a[i]未处理的最小小标,所有的a[i]+b[c[i]]即可构成组合的最小序列, 在其中用堆在序列中可以找到最小的,这样就是n*log n了 讲的不是很清楚,详见代码 ********
2017-07-12 22:40:14 221
原创 刷题记录-luoguP1113 杂务
全线工作,这样就是唯一最优解, 找出完成每个任务的时间, 然后取最大值即可。 ************************************************ #include #include #include #include #include #include #include #define pii pair #define INF 0x7f
2017-07-12 16:49:41 276
原创 刷题记录-luoguP1991 无线通讯网
这题是典型的二分答案 一开始用最小生成树做,用S(卫星电话)把最大边删去,发现并不是最优解。 二分枚举D,小于等于D的边才可以“发挥作用”,用并查集计算连通分量的个数, 只有连通分量的个数小于等于S时,才认为可行。 ******************************************* #include #include #include #include #in
2017-07-12 15:29:29 221
原创 刷题记录-luoguP1265 公路修建
这是一道最小生成树的题目 实际上,那些条件都是唬人的,根本没用。 对于条件(2):不妨假设A申请修建公路AB,B申请修建公路BC,C申请修建公路CA,构成了环。 然而,A申请AB,则有AB B申请BC,则有BC C申请CA,则有CA 所以AB 从而可得:对于一个图来说,节点的最短边不可能成环。 所以这题是裸最小生成树。 ******************************
2017-07-10 20:47:09 263
原创 刷题记录-luoguP1341 无序字母对
这是一道欧拉路径的问题 欧拉路径:对于无向图,当且仅当奇数度为0或2时,存在欧拉路径,即可以不重复的经过每一条边。 (1)当奇数度为0时,即所有节点的边数都是偶数时,肯定能回来(n条边,n/2条出来,n/2条回来),故叫做欧拉回路 (2)当奇数度为2时,这两个相应的奇数度节点一定一个是起点,一个是终点,否则做不到不重复的经过每一条边。 ***************************
2017-07-09 20:57:14 232
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人