01 2022 档案
摘要:   这题开始就有些技巧了 考虑0是怎么来的:2×5 所以计算所有数2的因数和5的因数取最小的即可 这题把我难住了,我一直再考虑究竟怎么排序的 但这个排序是肯定没规律的 换个想法,因为他只要
阅读全文
摘要:看见这个题我首先想到的是当年我csp就是栽到括号序列上面了 这个题数据很小,考虑dp 实话说这个dp很难想到 先预处理pre数组:与‘)’前面匹配的‘(’的位置 (因为保证序列合法) #include<bits/stdc++.h> using namespace std; char s[105],t
阅读全文
摘要:#include<bits/stdc++.h> using namespace std; const int N=2e5+10,M=1e6+10; int a[N],n, b[M],ans1,ans2; int main() { cin>>n; for(int i=1;i<=n;i++) { cin
阅读全文
摘要:突破点和关键点就在于那个c的k次方,为啥是c的k次方,肯定是有奇效的 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long const int maxn=1e5+5; ll
阅读全文
摘要:求最大子矩阵乘积最大 特别的要么为0,要么为2的次方 因为(2的次方)乘积=2的(次方的和),并且有0一定不能选(除非整个图都为0,一定要特判特判!!!) 问题转化为有障碍的最大子矩阵和 用悬线法(上篇有讲解)和二维前缀和处理 一定要特判0!!! #include<bits/stdc++.h> us
阅读全文
摘要:https://www.luogu.com.cn/problem/P4147 经典的有障碍的最大子矩阵 悬线法: 先预处理l[i][j],r[i][j],up[i][j] l[i][j]:表示点(i,j)向左最大扩展的纵坐标 r[i][j]:表示点(i, j)向右最大扩展的纵坐标 up[i][j]:
阅读全文
摘要:这个题的数据特别大,很容易想到数位dp,但是判断条件是啥不清楚 打表发现这个函数f(n)就是二进制下的翻转每个位 要想f(n)=n,n必须为回文数 很明显的数位dp 发现正向推判断的时候会超时 再看见至少这两个字 引导你去往容斥的方向去想 至少重复出现一次的反面就是均不重复出现 这样我们dfs的时候
阅读全文
摘要:这么大的数还有模数为三,很容易想到数位dp 这个题1-9每位数选0个模数为0,选1个模数为a(a为1或2),选两个模数为b(a为1则b为2,a为2则b为1),选三个模数为0,选4个等同于选1个。。。。循环 #include<bits/stdc++.h> #define ll long long us
阅读全文
摘要:分析: 该题仅仅只是判断能否集合,发现如果俩个点距离差为奇数,则可以,距离差为偶数,则不行 无向图保证连通,则有可能两个点有多条路径可以走,换个说法可能会有环 则可能会有一种情况,a->b有一条路径为奇数,有一条路径为偶数 那么其他点无论怎么样都可以满足与a,b两点集合 因为:假如一个点距离a为奇数
阅读全文