12 2022 档案
摘要:###关键 就很神奇的思路呀 如果两个数%x相等,那么他们加上某个数余x为0后,还是余数相等,并且并不互质,如果%x为任何数的都有两个,那么就肯定不会满足条件。 因为怎么样都会有那种两个人相等的情况。所以,必须满足有一个的余数是小于2的才可以。 我当时是一点也不会,还是彭少想出来的。 ###代码 #
阅读全文
摘要:###关键 这个题目很值得学习呀! 看着是不能记录所有的状态,但是可以映射一下,然后就是直接线性dp了 ###代码 #include <bits/stdc++.h> using namespace std; const int M=2e6+5; const int mod=998244353; us
阅读全文
摘要:###关键 f(i)(0,1)代表选和不选 如果我要选,就必须从选的那个儿子转移过来,因为我本身这个数最后如果要贡献上,就一定只能贡献给最后去掉的那个儿子,并且儿子必须是要选的 如果我不选,就儿子的最大累加就可以了 ###代码 #include <bits/stdc++.h> using names
阅读全文
摘要:###gcd个数的处理(i,j无限制) P2398 GCD SUM i为1-n,j为1-m,求gcd为k的个数 ###代码 #include <bits/stdc++.h> using namespace std; #define int long long const int M=1e5+5; i
阅读全文
摘要:###关键 这美妙的模拟,我写的和屎一样,写了一个小时,都没出来 1.只需要记录前缀就可以了,不需要适用vector进行二分查找 2.只需要看l或r是否为0就可以了,不需要去二分查找 ###代码 //只需要判断前缀或者后缀的题目,直接记录就行了,二分查找好麻烦的,模拟了半天也每出来 #include
阅读全文
摘要:###关键 当时确实是想到了使用减法,但是没有想明白怎么快速查找异或为n*n的这种数 其实也就是反向查找x^a^a=x,也就异或两次后就不变了,在异或一次,其实也就是把前面的某段区间给去掉了 所以可以保证时间复杂度是够的 基于后面的这个数,快速查找前面的数 ###代码 #include <bits/
阅读全文
摘要:###关键 构成一颗树,奇数点要为偶数个,并且大于0(学了这么就我竟然连这个也不知道,呜呜呜) 然后就是把1作为叶子节点,把0串起来就行了,感觉没有2000的难度 ###代码 #include <bits/stdc++.h> using namespace std; const int M=2e5+
阅读全文
摘要:###关键 跟炮兵阵地那道题目很像,先确定上面哪一行的状态,然后在确定下面这一行的状态,采用dp就可以枚举所有的状态 ###代码 #include <bits/stdc++.h> using namespace std; const int M=1005; int a[M][M],f[M][2][2
阅读全文
摘要:操作很简单,实际很难想的题目,现实中的经典问题
阅读全文
摘要:D. Lost Arithmetic Progression ##思路 0和-1的情况都挺好分析的。然后A和B的公差必须是lcm==C的公差,最后答案的计数,是先把中间填满了,然后看C的左右两边最大可以拓展多少 ##代码 #include <bits/stdc++.h> using namespac
阅读全文
摘要:最多的交换次数
阅读全文
摘要:##题意 主要就是每次操作删去一个数,知道最后只剩下一个数了 ##思路 竟然是最大生成树 每次删去一个点,也就相当于将两个点进行合并了,其实也不用管是将那个点删去了反正是合并了。 n个点,刚好可以合并n-1次,也就是每次找未合并的最大边就可以了 ps:竟然能将这里联系起来,思维还是不够强呀。 生成树
阅读全文
摘要:AcWing 2280. 最优标号 很神奇的建图,但是确实很有道理 //多个进行匹配的问题 #include <bits/stdc++.h> using namespace std; using ll=long long; const int N=1005,M=1e6+5; const int in
阅读全文
摘要:2237. 猪 分层图的简化,思路tql,大大的减少了点的基数 如果这个猪房已经被用过了,那就直接从用过的那个人哪里流过来就可以了 如果这个猪房没有用过,那就从超级起点流出来。 这样即舍去了,猪房这个点,还可以直接从人哪里进行转移,思路值得学习 //多个进行匹配的问题 #include <bits/
阅读全文
摘要:2240. 餐饮 //多个进行匹配的问题 #include <bits/stdc++.h> using namespace std; const int N=1005,M=1e6+5; const int inf=1e9; int h[N],ne[M],e[M],w[M],tot=1; void a
阅读全文
摘要:2187. 星际转移问题 至少时间问题,这里面没有路程的概念,所以采用分层图,一步步走点。 可以直接在上一次的残图上进行走点,这样子复杂度会低很多 #include <bits/stdc++.h> using namespace std; const int N=5e4+5,M=1e6+5; con
阅读全文
摘要:原理类似,用线段树来维护区间求和,只是一个是一次差分的值,一个是二次差分的值 ##P1438 无聊的数列 每次加上等差数列,单点查询 #include <bits/stdc++.h> using namespace std; #define ul (u<<1) #define ur (u<<1|1)
阅读全文