摘要:
题意:n*n的矩阵,m次赋值一个子矩阵为c,最后输出答案。 n<=1e3 m<=1e5 解:倒序处理。 拆行处理。 每行内并查集维护未被赋值的地方。 这样每个地方最多被赋值一次,每次修改要访问n行,时间复杂度是O(n(n + m)) 1 #include <cstdio> 2 3 inline vo 阅读全文
摘要:
题意:求有多少个1~n的排列满足: 其中n<=50 解: 贼神的一道题。 如何处理绝对值? 从小到大按顺序放数,可以拆掉绝对值。 如果你放的旁边有个空隙,那么贡献-i,如果旁边有个数,贡献+i 然后你设的是f[i][j][k][s]表示前i个数,有j+1段数(j个间隔),两端点状态为k(0~2分别表 阅读全文
摘要:
最近尝试了一下动态开点线段树,英文直译就是Dynamic Open Point Segment Tree,太SB了。 就跟之前的主席树写法差不多。 1 if(!x || x == y) { 2 x = ++tot; 3 } 1 if(!o) { 2 o = ++tot; 3 } 实际上当普通线段树用 阅读全文
摘要:
普及组的题.....填坑来了。 当年的我一眼二分+DP,现在都佩服起自己来了...... 然后我们就写个二分,在check里面写单调队列优化DP即可。 然后就A了...... 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm 阅读全文
摘要:
沙雕贪心...... 我一开始想的是倒着来,每次减去一个。 然后我们就有两个决策:去掉最后一个/去掉前面某一个。 然后第一个决策用并查集维护,第二个决策用线段树即可。仔细想想觉得普及组不会考这种东西,慌得一批。 然后又发现可能有问题:你可能取x个的时候不从x + 1转移过来,而是x + 2 然后就不 阅读全文
摘要:
简要题意: 给你一个n * n的非负矩阵,求问是否有子矩阵满足和在[k, 2k]之间。若有输出方案。n<=2000。 解: 首先n4暴力很好想(废话),然后发现可以优化成n3log2n,但是还是过不了..... 正解十分之玄妙..... 首先所有大于2k的都不可用。 然后若有一个子矩阵的和不小于k, 阅读全文
摘要:
emmmmmm,这个之前讲课的原题居然出到比赛里了。 我怒肝2h+然后A了此题,结果还是被某高一巨佬吊打...... 题意:n个球队两两比赛,胜得3分,败得0分,平得1分。 现有一个总分表,求问可能的比赛情况。 解: 发现答案与球队的顺序无关,于是按照分数排序。 然后发现可能搜到重复状态,可以记忆化 阅读全文
摘要:
SB贪心......暴露了我代码能力巨弱的本质。 题面 解:首先我们应该想到DP(但是我想到了贪心......) 然后分析题目本质,每个点有个限制,最早开走时间不得早于最晚上车时间。 然后我们就可以把每个人看做都在那个时间上车。 然后我们发现,对一个地方使用加速,会影响它后面一段区间。 然后就有个暴 阅读全文
摘要:
这是一道dijkstra拓展......不知道为什么被评成了紫题。 有一个很朴素的想法就是每次松弛的时候判断一下那个点是否被保护。如果被保护就不入队。 然后发现写起来要改的地方巨多无比...... 改到最后应该是用2/3个数组,分别表示最早可达时间(time),最早无防护时间(ruin)。以及一个取 阅读全文
摘要:
还是比较好写的......其中最毒瘤的版块居然TM是计算几何...... 巨型模拟。 主要难点是判断线段与圆是否相交,查错困难。 写出来没花太长时间,调试倒是一个状态一个状态的输出,和std对比,烦死了。 1 // kill ant 2 #include <cstdio> 3 #include <c 阅读全文