之前记录了一下,敲了有意义的题大概70~80道,很多题看了题解,希望以后减少看题解的次数吧
codeforces 1064
link
注意贡献,无用的贡献会排掉后面有用的贡献,所以用优先队列优先维护有贡献的点。
|
|
Yet another 2D Walking
按照顺序经过坐标系上面的一些点,使得欧拉距离和最小
分层dp即可
|
|
codeforces 1066 B
用最小的区间覆盖整个区间,贪心的去取,然后不断的滑动右端点
|
|
zoj 3278
二分莫名其妙的飞了很多次。。。
注意重复元素的统计,重复元素的第K大
突然想到的是XDOJ上面的区间第K大元素,那个也是一个二分,统计的依据是双指针进行相应的计算
|
|
codeforces 1066 C
操作L就是最左边方一本书,R就是最右边方一本书,?就是询问离最左边或者最右边的书的数量
一开始用deque进行相应的模拟,然后就炸了。
后来看到了不断的用左右两个指针进行相应的拓展,自己还是太弱了emmm
|
|
contest1066
按位计算贡献
|
|
IEEE dog walking
有n条狗,k个遛狗的人,每一条狗有一个时间。你要将狗划分成k个团,使得他们排序好之后的插值最小
贪心,先对原来的数组进行排序,然后两两做差
最后,取前面n-k的小的差值的和
|
|
BerOS File Suggestion
题目链接
就是做字符串的匹配,不过这道题由于母串比较的短,所以可以乱搞
这道题进一步的证明了unordered_map的优越性!!!
|
|
A find a number
我以前的bfs都是错的?
注意啊
数学题转换成搜索题目
|
|
E getting deals down
感觉是一道比较好的二分的题目。
需要二分的条件有两个,需要一定的转换的技巧
题目的大意:
找一个d,使得任务的难度超过d,就会跳过,问最多能执行多少个任务,且总时限不能超过t.
我们发现d在p数组中。
然后排序统计就行了
|
|
codeforces contest 1054 D
给定一个长度为n的数组,每一个数字长度为k位。
你可以操作任意多个数,使得这个数变成这个数的反。
为做多有多少个这样的子串。
求出来最少有多少个这样的子串,使得它的亦或和为0,那么就可以用总方案数减去了
亦或和为0,用前缀亦或和的思想来解决。
|
|
contest 1068 E. Multihedgehog
题目就是定义了半径恰好为k的一个树形的结构
我们从叶子节点不断的向上面删除节点,问最后是否能够是满足条件的结构
注意定义,cnt[]要及时的清除
|
|
contest1073 C
二分要修改的区间的长度,然后二分判断的条件一开始没有想清楚。。。
思想还是挺一目了然的,然而。。。
|
|
bzoj 3124
记录最长链上面的节点,从而来解决关于次长链上面的问题
|
|
contest1073 F
题目大意:
给一个树形的结构,然后选择两条链, 使得一条链的两端不能在另外一条链上,并且满足下列的条件:
- 公共的点的数量最大
- 在满足1的条件下,使得两个链的长度最长。
实质上就是求满足条件的点的最长链,
满足条件的链就是子树的度数>=2,否则不能成为公共点
注意结构体的两个最优解的条件比较函数
|
|
contest 1043 E
有n个人,有m个相互讨厌的人,他们会和不讨厌的人之间两两组合,最后获得一个总的分值,要使这个分值最小
分成两个部分计算:
$x_i+y_j \le x_j+y_i$, 转换一下$x_i-y_i \le x_j-y_j$,于是就按照这个属性进行排序。
一开始假设是相互不讨厌的,然后得到总的最小的边权。然后将那些相互讨厌的边权减去。
因为一开始采取的就是最优的策略,因此,减去的时候取min.
最后就能得到答案了。
|
|
bzoj 1315 (T了待更) 双割
问有多少种方法,使得去掉两条边之后,使得原来的连通变得不连通
用传统的方法写T了
|
|
claris 跑的飞快的代码
emmm是用数学方法的
link
codeforces 19e
一个图是二分图当且仅当没有奇环。
概念区分
区分树边,前向边,横跨边,以及反向边
题解:
我们统计每一条边经过了多少个奇环就行了,其中统计的方式用了差分的思想
|
|
hdu5254 (代码被叉,有反例)
|
|
题意:
给定一个图,首先前n-1条边表示这个图的生成树,然后后面的m-n+1条边加在图中。
题目要求删掉最少的边,使得原来的图不连通。并且删掉的边,有且仅有一条属于生成树。
问最少删掉几条边。
题解:
首先因为只能删掉生成树上面的一条边,一次肯定选择树上节点度数为1的节点。满足上面的条件之后,选择度数最少的节点就可以了。
|
|
hdu 4654(待更)
k连通分量的定义:这个图的最小割>=k, 那么就是k连通分量
最小割的算法
时间复杂度是$O(n^3)$
好像要是用新的算法,用了分治的思想去计算的,不会啊emmm
hdu 4115-2-sat
题意:
alice和bob玩剪刀布石头的游戏,alice已知bob的所有的操作,bob会对alice的第i个操作和第j个操作进行操作, 有下面的限制:
- 第i个操作和第j个操作要一样
- 第i个操作要和第j个操作不同
若alice输了其中的一局,那么alice就输了
问最后的输赢
题解:
alice要么和bob平局,要么赢bob.于是转化为了一个2-sat的问题
若要使操作使i,j相同时,那么可以有下面的连边:
- 若两局不能都平,那么第i局平必然可以推出第j局赢,若第j局赢那么第i局赢
- 若不能第i局平,j局赢,那么i局平那么,第j局必然是平, 若第j局平,那么第i局必然赢
- 若不能第i局赢, 第j局平。。。。
- 若不能两局都赢。。。
用tarjan求连通分量,第一次这样写2-sat,所以说2-sat也是一种思想2333
|
|
poj2914-无向图的最小割
需要一个新的算法
当板子积累了
|
|
gym 101964I
题目联链接
题意读错了,注意里面支配集的定义是:
首先选出来一个支配集的点集,然后其他不在集合里面的点至少有一条边与点集里面的点相连。不是我们平时理解的点支配集,它的定义是任意一条边至少有一个点在集合里面。
问有多少选点的方案。
题解:
dp[i]表示前面i个节点的方案的数量。
转移方程:$d[i] = \sum_{k=j+1}^{i-1}dp[j], g[i][j] = 0 ans j+1~i-1至少与其中的一个点相连$
|
|
gym c
link
题意:
给一棵树形的结构,然后有若干个点为黑色。
选取若干个点,使得他们的点的最长链最短,并且点集的大小为m.问这个最短的最长链。
题解:
首先可以想到是二分。
但怎么二分确实很伤脑筋。
可以看到后面的代码先用bfs取小范围的点,然后用dfs进行统计判断,这种思路真的很巧妙emmm
如果按照一开始的想法将每一个点作为根进行bfs,感觉会有特殊的情况没有考虑到。
发现直接贪心不好写。。。
|
|
hdu 5988
最小费用流的最新的模板
double 改成 float就过了,真的是极限操作。。。
|
|
hdu 5991
题意:
给一个图,现在让你增加或者减少一条边,这样的操作不超过十次。
问最少经过几次,使得这个图的各个分图变成团
题解:
根据floyd的覆盖的思想,进行不断的扩充
|
|
2018icpc 沈阳G(数据结构转化为数学解)
题意:
给定平面的四种操作,然后进行相关的查询
题解:
$x^2+y^2 = r^2$, 先把(0~6000, 0~6000), 共(6001*6001)个点压入vector中,然后解方程的时候从中取出相应的解,从而缩小搜索的范围。
注意数据清空的小技巧
代码
|
|
Qingdao Regional Contest D Magic Multiplication (爆搜)
先确定B数组,然后确定A数组
中间有一个优化很优秀!
当num<a[1]且num!=0时,num必然是两位数
代码
|
|
Plants vs. Zombies
题意:
从左向右走,每一次移动后,对这个格子施肥,问最后的最小权值最大是多少
题解:
二分,模拟贪心向右取就可以了
这里注意二分取上界的写法!因为每一个格子有一个权值,因此其实它的权值是阶跃的。
<=x中最大的一个数
|
|
代码
|
|
Color Squares(爆搜)
uva 4025
很有意思的一个搜索题,先预处理出来状态答案,然后直接进行查询就可以了
code
|
|
cf-1073 E(dfs+bit)
bit维护深度节点的信息,然后回归的时候将标记进行删除
code
|
|
cf contest 1073 F(无脑贪心)
无脑贪心
code
|
|
loj 正则表达式
主要积累一下正则表达式的匹配的执行的顺序
|
|
loj 122
积累模板,强制在线
code
|
|
codeforces contest 1062D
注意浮点数和整数运算的时候,注意规范。。。
被坑。。。没取floor就Wa了。。。
n/i不是向下取整的意思?
|
|
codeforces contest 1062 一个连续区间的lca是什么
题意:
给定一个树形的结构,每一个询问都是一个区间,然后你可以删除区间里面的一个点,使得他们的lca最大
题解:
可以看tutorial,主要的思想就是线段树维护区间的lca和支配这个区间的两个点,这两个点的lca构成区间的lca.
然后找到这两个点之后,就能求两遍答案,之后取最优解就可以了。
|
|
带权lca的求法
luogu 3964
切比雪夫距离转化为曼哈顿距离
注意公式转换成前缀和
切比雪夫和曼哈顿距离的相互转化
|
|
ICPC 2018 南京 最小球覆盖模板
|
|
2018 南京 icpc k 搜索
图上有若干个点, 每一次都可以设置一个所有点的移动的方向,要求最后所有的点移动到一个点,移动的步骤不能超过50000,输出移动的方案。
这样的方案一定是存在的。
|
|
codeforce 1079 C 记忆化搜索
5倍常数就T了,所以要加记忆化搜索
|
|
codeforces contest 1078 C–树形dp
想清楚每一种状态对用的计数的状态,不重不漏即可。
主要讨论清楚该节点与儿子节点的关系,该节点与父亲节点的关系即可
code
|
|
codeforces contest 1078 B(背包dp)
题意:
要求你给定一个k和m,你能确定每一个物品的重量。
题解:
若值的种类小于等于2,那么就是n
否则就是找m个重量相同的物品,并且这m个重量相同的不能记录在背包的状态中。
code
|
|
codeforces contest 1077 E (从后向前贪心)
题意:
给定若干个类型的种类的个数,要求选出来的一些种类,使得后一个种类的个数是前一个种类的个数的2倍。
题解:
从后向前贪心即可
code
|
|
poj 3585(二次换根+树形dp)
第一次dfs的时候计算以1为根的答案。
第二次进行dp的时候不断的换根进行计算。
code
|
|
P1441 砝码称重 (dfs+dp计数)
注意这道题目里面的记忆化的思想
code
|
|