摘要: 看见这个题我首先想到的是当年我csp就是栽到括号序列上面了 这个题数据很小,考虑dp 实话说这个dp很难想到 先预处理pre数组:与‘)’前面匹配的‘(’的位置 (因为保证序列合法) #include<bits/stdc++.h> using namespace std; char s[105],t 阅读全文
posted @ 2022-01-22 21:16 wzx_believer 阅读(58) 评论(0) 推荐(0) 编辑
摘要: #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 阅读全文
posted @ 2022-01-21 13:06 wzx_believer 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 突破点和关键点就在于那个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 阅读全文
posted @ 2022-01-19 21:43 wzx_believer 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 求最大子矩阵乘积最大 特别的要么为0,要么为2的次方 因为(2的次方)乘积=2的(次方的和),并且有0一定不能选(除非整个图都为0,一定要特判特判!!!) 问题转化为有障碍的最大子矩阵和 用悬线法(上篇有讲解)和二维前缀和处理 一定要特判0!!! #include<bits/stdc++.h> us 阅读全文
posted @ 2022-01-19 19:55 wzx_believer 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 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]: 阅读全文
posted @ 2022-01-19 18:10 wzx_believer 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 这个题的数据特别大,很容易想到数位dp,但是判断条件是啥不清楚 打表发现这个函数f(n)就是二进制下的翻转每个位 要想f(n)=n,n必须为回文数 很明显的数位dp 发现正向推判断的时候会超时 再看见至少这两个字 引导你去往容斥的方向去想 至少重复出现一次的反面就是均不重复出现 这样我们dfs的时候 阅读全文
posted @ 2022-01-19 18:02 wzx_believer 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 这么大的数还有模数为三,很容易想到数位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 阅读全文
posted @ 2022-01-16 21:42 wzx_believer 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 分析: 该题仅仅只是判断能否集合,发现如果俩个点距离差为奇数,则可以,距离差为偶数,则不行 无向图保证连通,则有可能两个点有多条路径可以走,换个说法可能会有环 则可能会有一种情况,a->b有一条路径为奇数,有一条路径为偶数 那么其他点无论怎么样都可以满足与a,b两点集合 因为:假如一个点距离a为奇数 阅读全文
posted @ 2022-01-16 20:16 wzx_believer 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 分析: 排列为 1 2 3 ... p p+1 p+2 p+3 ... 2p 2p+1 2p+2 ... 3p . . (k-1)p+1 ... kp 发现如果我们选择同一行的p个数 一定是p的倍数 像此类p的倍数或者模数的问题 考虑分类 分为摸p的余数[0,p-1]这么多类 现在考虑kp个数里面选 阅读全文
posted @ 2021-12-29 11:47 wzx_believer 阅读(43) 评论(0) 推荐(0) 编辑
摘要: https://mp.weixin.qq.com/s?src=11&timestamp=1639620052&ver=3499&signature=Z1PQTvhwEnrHBdzSCGJIQNEz-zKRTioorNA4KI7qsS1lvAfH6Z7sKjZCZU8KG9DUVOvDrYhjmSul 阅读全文
posted @ 2021-12-16 10:32 wzx_believer 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 感觉很像小时候玩的一个游戏《一笔成画》 保证图连通,每条边都经过奇数次,等价于每条边只经过一次 对于重边可以不考虑,1->3,3->1,再走回来就行了 发现路径是什么样的不重要,重要的是起点和终点 发现起点和终点的度数一定是奇数 起点最后会引出一条出边 终点最后会收回一条入边 且起点和终点可以互换 阅读全文
posted @ 2021-12-15 16:10 wzx_believer 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 很明显的一个dp dp[i][j]表示打了前i张牌模数为j的方案数 转移方程: dp[i][(j+a[x])%k]=dp[i][(j+a[x])%k]+dp[i-1][j]; 初始状态dp[0][0]=1; #include<bits/stdc++.h> using namespace std; # 阅读全文
posted @ 2021-12-15 15:42 wzx_believer 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 乍一看以为是博弈论,但仔细分析发现就是个简单的图论问题 个人觉得有点像五子棋 分析想要赢,就必须保证有两条以上的路径可供选择,并且这两条路都是必赢的 最简单必赢状态 一个点直接连接两条标记点 复杂点的必赢状态: 我们将最简单的必赢状态的那个点叫准必赢点 如果一个点直接连接了两个或以上的准必赢点,也是 阅读全文
posted @ 2021-12-11 23:32 wzx_believer 阅读(63) 评论(0) 推荐(0) 编辑
摘要: 求逆元有三个办法 这个题数据要求线性递推 #include<cstdio> #define ll long long using namespace std; const int maxn=3e6+5; ll inv[maxn]={0,1}; int main(){ int n,p; scanf(" 阅读全文
posted @ 2021-12-11 17:21 wzx_believer 阅读(77) 评论(0) 推荐(0) 编辑
摘要: 数论知识好多都忘记了,今天周末没啥事就复习一下 用扩展欧几里得算法 取地址不是很熟悉就用全局变量吧 #include<bits/stdc++.h> using namespace std; long long x, y; void exgcd(long long a, long long b) { 阅读全文
posted @ 2021-12-11 16:55 wzx_believer 阅读(54) 评论(0) 推荐(0) 编辑
摘要: 分析一下就是一个简单的数论组合数 唯一注意的就是要用逆元,否则要写挂 容斥:ans=总方案数-两个图毫不相干的方案数 总方案数=C((n*(n-1)/2),a)×C((n*(n-1)/2,b); 毫不相干=C((n*(n-1)/2),a)×C((n*(n-1)/2-a,b); #include<bi 阅读全文
posted @ 2021-12-11 11:50 wzx_believer 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 这是一道非常典型的区间dp for(int i=2*n-1;i>=1;i--) for(int j=i+1;j<=2*n;j++) for(int k=i;k<j;k++) f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+a[i]*a[k+1]*a[j+1]); int 阅读全文
posted @ 2021-12-09 12:00 wzx_believer 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 当年我就是死在这个题目上面,错失一等奖 隔着这么久再来做思路还是很清晰的 一个树形动态规划 如果是 ( :dp[u]=dp[fa]; 如果是 ):dp[u]=dp[fa]+x; 其中x是加入)后多出来的字串数,经分析可得x就是连续的括号数 连续的括号可以是( )( (()) )【算2个】 我们就要维 阅读全文
posted @ 2021-12-08 11:38 wzx_believer 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 作为一个退役两年的蒟蒻,来刷刷今年的复赛第一题,把我弄emo了 开始我理解错误了,我每次选择r最小的那个停机坪再更新它,这样能保证空闲时间是最少的,于是我用了线段树保存最小值,只能过25,我怀疑我线段树打错了 就改用树状数组,还是25。至此我还没想到我的方法不对,又改用优先队列,还是25....崩溃 阅读全文
posted @ 2021-12-06 22:52 wzx_believer 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 在此之前先看看一般的约瑟夫问题 发现这个题唯一不一样的就是m,只要在递推的时候不断的更换m数组即可 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long int n,k; 阅读全文
posted @ 2021-12-05 10:50 wzx_believer 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 乍一看,应该是个背包不错了,一看数据,扯犊子呢,数组开不到那么大 这个题的关键就是 **(1)**物品是连续的,即1,2,3,4,5,,,,n **(2)**每件物品至少有一件 先判断为-1的情况: 所有物品总量和还要小于m,这样再怎么也拼不够 再考虑物品总量>=m 这样总能找到一组,使之和为m!! 阅读全文
posted @ 2021-12-03 12:01 wzx_believer 阅读(35) 评论(0) 推荐(0) 编辑
摘要: #include <cstdio> #define MAXN 400010 long long num[MAXN]; long long max(long long a, long long b) {return a > b ? a : b;} long long tree[MAXN * 4]; v 阅读全文
posted @ 2021-12-02 10:45 wzx_believer 阅读(62) 评论(0) 推荐(0) 编辑
摘要: 无向图缩点,不知道为啥我写tarjan就是过不了 注意最后一定要把缩点后的大小按照从大到小开始删边 比如说你删4条,在一个环中可以另外得到3个分量,但是如果放在两个环里面分别为删两边,则总和只能得到2个分量 我的代码只能过80的点(我真的尽力了,现在晚上1.55我困得哟死) 2022.3.28更新, 阅读全文
posted @ 2021-12-02 01:56 wzx_believer 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 直接dfs找环即可 两次异或可以抵消,所以直接记录每次异或,最后找到环判断xor[u]^xor[v]^dis<u,v>是否为零即可 #include<cstdio> #include<map> using namespace std; const int N = 100000 + 10 , M = 阅读全文
posted @ 2021-12-01 17:28 wzx_believer 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 这个题关键在于每个ai只是1或-1,也就是总和最大2e6。 有什么用?可以开到数组 再发现这个x一定是存在的,因为1和-1均为连续变化的,所以整个数列是连续的 综上可以用STL里面的vector #include<bits/stdc++.h> using namespace std; const i 阅读全文
posted @ 2021-12-01 10:21 wzx_believer 阅读(17) 评论(0) 推荐(0) 编辑
摘要: ![](https://cdn.luogu.com.cn/upload/image_hosting/fmp6cq4d.png) ![](https://cdn.luogu.com.cn/upload/image_hosting/ya0hnagl.png) 阅读全文
posted @ 2021-11-30 18:05 wzx_believer 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 当时比赛绞尽脑汁都没想出办法 结果只要一直输出YES就行了 题目原型是2009IMO蚱蜢跳跃韦东奕的封神之题 阅读全文
posted @ 2021-11-30 17:30 wzx_believer 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 比赛的时候脑子没转过来 比赛过后一下子就反应过来了 实际上后面a2,a3,,,an要保证能加起来组合成xa1,一定要连续,且第一个为x个,第二个为x-1个,第三个也为x-1个,第n个也为x-1个 因为这样x进制不断进位就可以保证 #include<bits/stdc++.h> using names 阅读全文
posted @ 2021-11-30 16:59 wzx_believer 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 求最长上升子序列并输出字典序最大 如果只求LIS的话,直接dp+lower_bound即可 但是如果要记录字典序最大,那么就不能用dp了 重新引入两个数组 low[len]表示长度为len的LIS的结尾的数a[] pos[i]表示以a[i]为结尾的LIS的长度 #include<bits/stdc+ 阅读全文
posted @ 2021-11-25 11:43 wzx_believer 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 发现n无比大,肯定是一步得答案的那种,考虑化简 发现最后n很大很大精度就会掉,直接输出2即可 code by wzxbever: #include<stdio.h> #include<stdlib.h> #include<string.h> double pow(int a,int b){ doub 阅读全文
posted @ 2021-11-17 15:03 wzx_believer 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 高考结束了,大学准备选择计算机专业,回归 阅读全文
posted @ 2021-06-29 16:23 wzx_believer 阅读(24) 评论(0) 推荐(0) 编辑
摘要: 一道很简单的练手题目 https://loj.ac/problem/10121 submit_code 题目大意: 多次询问区间的完美序列;(完美序列定义为一段连续序列中各个数字都不同) 求多个区间最长完美序列(不修改) 分析: 静态查询:last数组,求最大?dp数组 (动态查询估计就要莫队了吧 阅读全文
posted @ 2020-01-15 21:52 wzx_believer 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 打游戏太无聊了,觉得还是做题有意思(尽管一直暴毙) 阅读全文
posted @ 2020-01-13 17:05 wzx_believer 阅读(203) 评论(2) 推荐(0) 编辑
摘要: int int 会爆int 减法加mod main 函数里没写附函数 条件理清,题目读完 freopen!!!!千万小心 输出是换行还是空格 队列,栈,操作的时候别忘记出队出栈 输出时字母的大小写 !& ^ | ~有位运算就打括号 特判:有除号就特判分母为0;n=1时?x=0? 输出的字母大小写?尽 阅读全文
posted @ 2019-11-15 14:00 wzx_believer 阅读(134) 评论(0) 推荐(0) 编辑
摘要: NYG的背包 【问题描述】 NYG有一个神奇的背包,每放进去一个物品,背包的体积就会变大。 也就是说,每放进一个物品,背包会被占用一定的体积,但是紧接着背包的总体积又会增大一定的值(注意是在放入物品后背包总体积才增大)。 NYG发觉这个背包十分好用,于是不由自主地想到了一个问题。 现在给出背包初始容 阅读全文
posted @ 2019-11-15 12:36 wzx_believer 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 以前没怎没接触过,快要考试了,赶快来补一补 https://www.luogu.org/problem/P3201 分析: 将同一种颜色用类 似链式前向星 的形式存起来 考虑 启发式合并,将小的合并到大的上面 如果要将x变为y, 如果sz[x]sz[y],如果直接把y接在x后面颜色就会变为x 所以我 阅读全文
posted @ 2019-11-15 10:43 wzx_believer 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 二进制优化分组背包: http://acm.hdu.edu.cn/showproblem.php?pid=2844 分析: 没什么好说的就是模板 code by wzxbeliever: 阅读全文
posted @ 2019-11-15 08:51 wzx_believer 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 线段树: https://www.luogu.org/problem/CF558E 分析: 我们考虑建26棵线段树, 第i棵线段树的[x,y]表示在[x,y]中一共有多少个字母'a'+i 1 至于修改时我们可以以升序为例, 从a至z按顺序往前丢,记得要清空区间 同理,降序反过来就是了 code by 阅读全文
posted @ 2019-11-14 21:36 wzx_believer 阅读(229) 评论(0) 推荐(0) 编辑
摘要: floyd: http://acm.hdu.edu.cn/showproblem.php?pid=1599 找最小环: code by wzxbeliever: c++ //%std include using namespace std; typedef long long ll; inline 阅读全文
posted @ 2019-11-14 20:07 wzx_believer 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 面对焦虑调整心态最有效的方式就是直面焦虑。 什么意思? 我们平时说过于紧张了不好,如何去调整心态无非就是: 1、太紧张了就不去想它,让自己心态平和;2、做点其他什么事情去转移注意力,去锻炼一下等等。 这些面对一般的考试,一般的焦虑是很有用的; 但是,如果面对的是很重要的事情,自己觉得会对自己产生深远 阅读全文
posted @ 2019-11-14 16:10 wzx_believer 阅读(194) 评论(0) 推荐(0) 编辑