随笔分类 -  《TZOJ练习》

摘要:A:签到题 排个序看一下相邻三个能够构成三角形即可。 #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int,int> pii; const int N = 2e4 + 5; const 阅读全文
posted @ 2022-03-13 23:03 levill 阅读(198) 评论(0) 推荐(1)
摘要:题意:简化下就是给定一个n * m的棋盘,有q组询问,每次询问棋子是否能放置在该位置。 能放置的条件就是,该位置之前没棋子,且该位置可以走到棋盘外。 Solution: 很明显这里是一个搜索类的问题,但是因为询问次数过多,如果对于每次询问都去搜索显然会超时。 考虑对询问离线:假定我们目前已经放置下了 阅读全文
posted @ 2021-08-24 16:31 levill 阅读(57) 评论(0) 推荐(0)
摘要:1001 : 点双连通分量: tarjan模板题:需要注意的是,点双连通分量是极大子图,也就是说他如果是很多个环拼成一个环,那么这个分量还是一个,就是最大的那个。 我们从环顶退栈即可,类似割点的位置。 / Author: levil #include<bits/stdc++.h> using nam 阅读全文
posted @ 2021-08-12 17:23 levill 阅读(36) 评论(0) 推荐(0)
摘要:出题人卡的真的好. 宇佐大人的白旗 ~ Most Famous Hero: 这题有点无语了,比赛的时候数据出问题了,害我一直出问题,最后数据修了就过了。 做法1:直接最短路上更新就好了。 // Author: levil #include<bits/stdc++.h> using namespace 阅读全文
posted @ 2021-08-02 17:20 levill 阅读(45) 评论(0) 推荐(0)
摘要:A:没写。 B:没写。 C: m个块来考虑,假设当前为[1,m]位置都站满了。 现在我们要到[2,m + 1],如果a[1] > a[m + 1],跳过去之后a[m + 1]被站满。 如果a[1] < a[m + 1]那么跳过去没被站满,那么剩下的只能有[2,m]来填充。 那么综上所诉我们的答案就是 阅读全文
posted @ 2021-05-11 09:01 levill 阅读(210) 评论(0) 推荐(0)
摘要:A: bfs搜索即可,每次都对当前的数字进行所有的变换,然后记录一下状态有没有出现过,第一次遇到那个数字一定是时间最小的。 这里我的写法多次一举写了个小顶堆的bfs。 #include<bits/stdc++.h> using namespace std; typedef long long LL; 阅读全文
posted @ 2021-05-06 18:28 levill 阅读(160) 评论(0) 推荐(0)
摘要:非常好的一个题: 首先进行化简:$yn! - xn! = xy \Rightarrow yn! - xn! - xy + (n!)^{2} = (n!)^{2} \Rightarrow (n!+y)(n!-x) = (n!)^{2}$ 可以看到的是,式子左边是一个完全平方数。 那么显然式子的左边是它 阅读全文
posted @ 2021-04-13 10:28 levill 阅读(73) 评论(0) 推荐(0)
摘要:这题一开始没注意到d的范围,所以没做出来。 这里我们可以想到的是,我们对询问反向涂色,那么对于已经涂过的点的颜色就是最终颜色,那么就减少了很多重复的不必要操作。 然后因为d最大只有10,所以我们维护每个点已经涂到过的最远距离之后,暴搜染色的复杂度就最大为10 * m左右。(即d从0开始一直+1) # 阅读全文
posted @ 2021-04-13 08:17 levill 阅读(64) 评论(0) 推荐(0)
摘要:一开始的思路是把限制放入队列,然后线段树去维护中间的值。 但是发现队列的进入顺序可能会造成错误,就没想了。 这里有个很重要的条件,就是给出的这头牛是最高的牛。 然后,很显然的一点就是对于给出的限制条件,中间的牛肯定至少要比两端的牛小1。 对于这步思路,我们就将中间所有的牛都 -1,这样就把关系虚地更 阅读全文
posted @ 2021-02-27 09:55 levill 阅读(61) 评论(0) 推荐(0)
摘要:因为是正整数解所以不能高斯消元了。 然后一开始想的是枚举a【1】,然后想办法O(n)检查,但是这个O(n)检查就是想不出来。 然后二分复杂度确实满足,但是感觉上不满足二分性。 在一段仔细思考之后,发现,a[1]的大小会控制其他值的大小,那就可以在check之中满足二分性。 然后就可以二分了。 #in 阅读全文
posted @ 2021-02-26 10:03 levill 阅读(81) 评论(0) 推荐(0)
摘要:一开始想的dp用了结构体来存位置,想试一试,但是无法证明正确性,很显然就wa了。 这里的一个切入点就是位置数很小,一开始忽略了这里。 后面可以发现,对于每一回合,如果我们枚举三个人的位置肯定复杂度不够,但是有一个人的位置必定在a[i],所以只需要枚举两个人的位置。 dp[i][j][k] - 表示一 阅读全文
posted @ 2021-02-16 08:41 levill 阅读(127) 评论(0) 推荐(0)
摘要:dp[i][j] - 表示以i,j结尾的最大序列长度,也可以是开头。 如果是为开头的话就从后向前dp了。 这题的转置,很显然发现,如果能转置,那么相邻差值肯定一样。 所以可以先去求一个差分数组再去dp。也可以边dp边算差值。 然后注意一下不重叠。因为我们的dp值中都少了一个位置,所以我们的重叠的位置 阅读全文
posted @ 2021-02-07 09:48 levill 阅读(89) 评论(0) 推荐(0)
摘要:贪心问题。 从左到右去移动,这里把负的看成是从右向左得到的。 那么就可以得出最大步数就是每个需要移动的和总步数之间的最大值。 #include<bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int,int 阅读全文
posted @ 2021-01-26 09:49 levill 阅读(46) 评论(0) 推荐(0)
摘要:这题一开始想当签到题的,没想到这么惨烈。 首先,暴力计算每个数的因子和,复杂度nlong,n最大1e7,会超时。 正解:考虑每个数的倍数会在这个区间中出现几个,然后再乘上每个数即可(也就是一个个计算每个数的贡献) 复杂度:O(n)。 代码汇总的题解里有。 阅读全文
posted @ 2020-12-20 18:12 levill 阅读(155) 评论(0) 推荐(0)
摘要:这题太妙了。 一开始一直在想怎么bfs和记忆化搜索。 正确的思路:把最外面看成源点,汇点对每个人建边,然后柱子的限制对自己拆点建边(限制做容量)。 然后超级汇点对每个人连边。最后要对满足条件的柱子之间建边即可。 这里输出巨坑。0 和 1 和 >1的输出都不一样,找了好久(出题人大气层) #inclu 阅读全文
posted @ 2020-12-11 21:22 levill 阅读(112) 评论(0) 推荐(0)
摘要:一开始想的是java大数然后字典树插入前40个。 但是这样会爆内存,数太大了。 但其实超过40之后保存前50位就可以了,这样精度也能保证。 这题题目内存很紧,优化了好几次常数终于过了。 #include<bits/stdc++.h> using namespace std; typedef long 阅读全文
posted @ 2020-12-10 19:41 levill 阅读(98) 评论(0) 推荐(0)
摘要:一开始想线段树来统计所有直线,发现这样很难做到。 因为最多只有1e6条直线,那么直线存入结构体然后去重即可。 这里去重要对结构体重写一下== 和 <。然后就行了。 也可以把每条直线(x,y,z)换成独特的值来排序,这样可能快一点。 坑点:不在物体里的点就不要去统计了。 #include<bits/s 阅读全文
posted @ 2020-12-10 16:45 levill 阅读(116) 评论(0) 推荐(0)
摘要:一开始一直想着最短路松弛,但是发现这样很难处理T条长度排序的边。 正解:二分最大限制边,然后最大流去check。 对于边 <= 最大限制边的就可以连接两点,容量为1。 然后最后汇点和源点连1,n,容量为INF。 最后判断最大值是否大于二分值即可。 细节:边数组要开4倍,因为无向图加反向边。 #inc 阅读全文
posted @ 2020-12-09 20:04 levill 阅读(82) 评论(0) 推荐(0)
摘要:矩阵完全背包。 和普通的背包不一样一开始难以入手。 但是我们这里不需要去考虑拼接,把每种面积都当成一个重量。这样来即可。 对于每一种物品插入容量的切割,分为四种。 https://blog.csdn.net/qq_41713256/article/details/80782998(这里写的很详细) 阅读全文
posted @ 2020-12-09 19:17 levill 阅读(75) 评论(0) 推荐(0)
摘要:这题其实一开始就已经想到了区间dp,但是不是很自信。(网上好像都是写的dfs。) 首先把连续的一段合并到一起,然后用dp[i][j]来表示i堆~j堆是否能合并。 主要是合并有很多种合法,一开始少了一种,但是仔细看题目里其实已经提示了你。 xy型,即最传统的合并。 xAy型,判断下两头即可。 AxAy 阅读全文
posted @ 2020-12-09 14:02 levill 阅读(66) 评论(0) 推荐(0)