摘要: dream 首先朴素的 \(dp\) 很好想,前缀和优化也很简单,接下来考虑如何继续优化。 我们发现反转操作相当于把一个序列变成环反转后再移动几格,于是我们只需要知道 \(1\) 位置的变换就能知道其它位置数的变换。 #include<iostream> #define int long long 阅读全文
posted @ 2024-11-01 21:44 bryce_yyds 阅读(13) 评论(0) 推荐(0)
摘要: T1 我们发现 \(1\) 其实根本没有用,只和一个连通块里的 \(0\) 的个数有关,直接 \(dfs\),判断即可。 #include<iostream> #include<cstring> using namespace std; inline int read(){register int 阅读全文
posted @ 2024-11-01 21:37 bryce_yyds 阅读(22) 评论(0) 推荐(0)
摘要: T1 状压 \(dp\),两两之间有相同的位,那一位就为 \(1\),否则就为 \(0\),考虑哪些选法不合法,要在 \(0\) 的位上为 \(1\),即只在 \(1\) 上选和不选都是不可以的,于是状压 \(dp\) 即可。 #include<iostream> #define int long 阅读全文
posted @ 2024-11-01 21:27 bryce_yyds 阅读(15) 评论(0) 推荐(0)
摘要: T1 考虑从后往前去做,随机化字母权值,考虑两个字符,一个设为正的权值,一个设为负的权值,两两就可以抵消,若有一个后缀权值等于另一个后缀权值且长度为偶数,就肯定有一个回文串,若有一个后缀权值等于另一个后缀权值加减一个字母的权值且长度为奇数,就也肯定有一个回文串,存下来,离散化即可。 #include 阅读全文
posted @ 2024-11-01 20:49 bryce_yyds 阅读(41) 评论(0) 推荐(0)
摘要: T1 建边,发现要找偶环,但两个奇环也可以拼在一起,于是按照上面的思路模拟即可。 但是挂了一个点,不知道为啥。 #include<iostream> #include<vector> #include<cstring> using namespace std; inline int read(){r 阅读全文
posted @ 2024-11-01 20:27 bryce_yyds 阅读(39) 评论(0) 推荐(0)