上一页 1 2 3 4 5 6 7 8 ··· 10 下一页
摘要: 算是一个模板题吧 给出[l,r]的区间和,相当于s[r]-s[l] 一旦已经知道了 s[a]-s[b],s[b]-s[c],显然再给出一条[a,c]就可以判断"账本的真假"了 将每条这样的信息(l,r,w),l,r放入一个集合中, 用并查集来维护,并维护cha[l]=s[root]-s[l],cha 阅读全文
posted @ 2022-04-23 22:13 wzx_believer 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 首先奇数肯定不行 构造如果都是1 一个1的价值为2 肯定是不够的 考虑尽可能构造0 如果是 10 那次数分别是 4 2 倒一下就是 2 4 如果是 100 那次数分别是 8 4 2 倒一下就是 2 4 8 所以尽可能接尽可能多的0 模拟一下就好 #include <bits/stdc++.h> us 阅读全文
posted @ 2022-04-22 19:04 wzx_believer 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 首先能想到floyed暴力做法 60分是没问题的 进一步 两点之间路径可能会有多条 但是我们只用找到路径上最长边最小的那条 但是因为有多个询问 所以我们不能单方面考虑两个点 而是考虑很多对两个点 考虑建立最大生成树 这样的解一定是最优的!!!很巧妙 最后找两点之间的最短的那条边 用倍增lca 顺便维 阅读全文
posted @ 2022-04-22 15:53 wzx_believer 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 先看道板子题 初始化 F1 F2 F3 进行n-1次加速以后 变成 Fn Fn+1 Fn+2 点击查看代码 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long const 阅读全文
posted @ 2022-04-22 13:09 wzx_believer 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 预处理 nxt[i,j] 表示i到j最近距离i的下一个位置 最后记忆化搜索就好 #include<cstdio> #include<queue> #include<cstring> #include<iostream> using namespace std; int cur,n,m,s,t; in 阅读全文
posted @ 2022-04-22 12:52 wzx_believer 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 不得不说这个树形dp做法真牛 题目大意:给出一棵树,求一条路径,选择路上的V个点,使得被选择的点的相邻且不在路径上的点的权值和最大。 考虑换根的话很麻烦 还是类似毛毛虫那个题 每个点一定是处于一个路径的中间的 可能是一上一下 一下一上 一下 一上这四种情况 因为这个题目是有方向性的 a->b 的权值 阅读全文
posted @ 2022-04-22 10:15 wzx_believer 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 这个dp以前没见过 确实不会 怎么才能保证两两互不相交呢 在我印象里面没有这样操作过的dp 考虑换个想法 设dp[i,j,k]表示 前i个 两者差值为j 用了k次加倍 因为下标不能为负 所以整体向右偏移1300 初始化 dp[0,1300,0]=0 答案 max{dp[n,1300,i]} i属于[ 阅读全文
posted @ 2022-04-21 22:29 wzx_believer 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 树上计数 考虑如果一个点的亲儿子是偶数个 两两亲儿子配对就好 如果一个点的亲儿子是奇数个 挑一个出来和连上父亲 其余偶数个两两配对 n个两两配对的方案数为 (C(n,2)×C(n-2,2)×...×C(2,2))/((n/2)!) 化简得 (n!)/(2的n/2次方)×((n/2)!)预处理阶乘就好 阅读全文
posted @ 2022-04-21 22:14 wzx_believer 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 穿插R和B乱搞一下就好 点击查看代码 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long const int maxn=105; char ans[maxn]; int 阅读全文
posted @ 2022-04-21 21:48 wzx_believer 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 签到题 输出l 和2l即可 点击查看代码 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long int T; int main(){ cin>>T; while(T--){ 阅读全文
posted @ 2022-04-20 20:16 wzx_believer 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 当时比赛的时候期望不是多熟练 现在看来这个题还是多简单的 设E(k)表示当前在第k层 到n层期望的时间 当前有两种情况 要么到k+1层 要么回到0层 到k+1层: (1-p)× [E(k+1) + 1] 回到0层: p × [E(0)+1] E(k)=(1-p)× E(k+1) + 1 + p × 阅读全文
posted @ 2022-04-20 19:00 wzx_believer 阅读(669) 评论(0) 推荐(0) 编辑
摘要: 天梯赛就是喜欢搞些复杂的dfs和bfs 这题就是一道三维的bfs #include<iostream> #include<queue> using namespace std; struct Node { int a,b,c; Node(int a1,int b1,int c1):a(a1),b(b 阅读全文
posted @ 2022-04-20 11:45 wzx_believer 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 首先一看就知道是并查集 但是其实这个题不简单 首先要把题目读清楚 一个集合 a b c 可能a和b b和c分别有交集 但是a和c没有交集 首先可以想到对拥有同一个兴趣爱好的人合并 这样 a和b b和c 都分别合并了 现在考虑将 ab整体 和 bc整体 合并 每个人作为b 依次将每个人的兴趣爱好合并即 阅读全文
posted @ 2022-04-20 10:10 wzx_believer 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 开始我想的是用multiset 和stack维护 但是发现 虽然multiset插入很方便 但是不能查询中值 这样就可以拿到17分了 查询中值最快的方法一定是数组下标 假如我们用数组代替multiset的话 唯一不方便的就是要让每次插入后序列都有序 每次排序肯定不行 考虑lower_bound操作 阅读全文
posted @ 2022-04-20 09:34 wzx_believer 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 转移方程还是很容易想到 dp[i,j]=min(dp[i-1][j-1]+abs(),min(dp[i,j-1],dp[i-1,j])+1); 但是我写完之后发现答案就是不对 看完别人的code之后 才发现还要初始化!!!! 因为这个dp我们是对后面的字符进行操作 没有包含到在第一个字符串前加入很多 阅读全文
posted @ 2022-04-20 08:26 wzx_believer 阅读(24) 评论(0) 推荐(0) 编辑
摘要: 发现就是直线距离公式 所以排序之后 取左右两个端点就好 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long const int maxn=2e5; int T; stru 阅读全文
posted @ 2022-04-19 23:16 wzx_believer 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 就是一道高中物理题 让一名高中生都会做 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long double w,p; int main(){ cin>>w>>p;w/=10 阅读全文
posted @ 2022-04-18 17:09 wzx_believer 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 题目保证一定存在一条直线 假设这条直线不经过任何线段的端点 那么通过旋转或者平移 一定可以使得线段经过端点 那么只要固定一个端点 再判断斜率范围就好了 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #def 阅读全文
posted @ 2022-04-18 16:09 wzx_believer 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 题目大意 给出锥形的表面积 求体积的最大值时 的体积 底面积 和高 很明显的一个单峰函数 三分法 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> const 阅读全文
posted @ 2022-04-18 14:58 wzx_believer 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 考虑01背包 因为要求刚好凑满 所以转移的时候要判断一下 最后就是要求输出字典序最小的 首先保证能凑到 再者序列长度尽量长 最后保障小 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll l 阅读全文
posted @ 2022-04-18 14:26 wzx_believer 阅读(56) 评论(0) 推荐(0) 编辑
摘要: 很明显就是一道最短路问题 并且记录路径 还有一个坑点是 第一个输出的是最短路径数目 不是经过节点数目!!! 最后就是输出路径 我开始一直写成 pre[u]==mp[S]了 导致老是路径输出少一个 最后才发现错误 应该是u==mp[S] !!!! #include<bits/stdc++.h> usi 阅读全文
posted @ 2022-04-18 12:21 wzx_believer 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 发现 只有末尾全是9才会增加递增序列 所以判断最后是否全部都是9 如果是 那就是所以位数之和 如果不是 那就是最高位-1加上其他位置上都为9的各个位数之和 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #d 阅读全文
posted @ 2022-04-18 09:56 wzx_believer 阅读(33) 评论(0) 推荐(0) 编辑
摘要: 考虑相邻的两个树的高度 算出相邻两个树高度满足题意的时间区间 最后对每个时间区间取并 如果交集不为0 则取交集最小的 如果交集为0 则不成立 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define l 阅读全文
posted @ 2022-04-18 09:45 wzx_believer 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 很简单的一道dp 比赛的时候因为初始化的问题耗费了好多时间 dp[i]表示以i为结尾的连续字母的跨度 dp[i]=i-pre+dp[pre] 其中pre为i位置字母的前一个字母 最后答案就是min{dp['Z']} #include<bits/stdc++.h> using namespace st 阅读全文
posted @ 2022-04-18 09:36 wzx_believer 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 因为只能选择一条边进行增长 我们选择最小的一条边进行增加 接着发现增加后的面积要么是单峰函数 要么是单调函数 所以运用三分法去解决 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll lon 阅读全文
posted @ 2022-04-18 09:31 wzx_believer 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 设不同方案数为cnt p=1/cnt 1/p=cnt cnt=总方案数/重复的个数 这里就是一个简单的高中排列组合的知识 点击查看代码 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll l 阅读全文
posted @ 2022-04-17 10:02 wzx_believer 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 根据题意很容易想到二分 但是问题来了 二分面积但是长宽还是需要O(n)来确定 完全承受不了 观察这个题目相较于一般的最大子矩阵问题 在于两个数列 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define 阅读全文
posted @ 2022-04-16 09:19 wzx_believer 阅读(72) 评论(0) 推荐(0) 编辑
摘要: 观察发现两个0之间至少有2个1才能满足题意 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long long int T; vector<int>Q; int main(){ cin> 阅读全文
posted @ 2022-04-15 11:25 wzx_believer 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 很容易想到dp dp[i,0]表示前i个 第i个不换 的最小值 dp[i,1]表示前i个 第i个换 的最小值 转移一下就行了 #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&(-x) #define ll long l 阅读全文
posted @ 2022-04-13 19:42 wzx_believer 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 简而言之: 一棵树,每秒钟你要做两个操作: 传播:对于每个顶点v,如果v的至少一个孩子被感染,你可以通过感染你选择的v的至多一个其他孩子来传播疾病。 注射:你可以选择任何一个健康的顶点,感染它。 求最少的次数 分析:很明显只关于一个节点儿子的个数为多少 如果有x个点有儿子 那么至少需要x次 并且很明 阅读全文
posted @ 2022-04-12 11:35 wzx_believer 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 本来想练一手费用流的 但是一看这个题分层图跑的更快 而且也是个很好的分层图板子 将图分为k+1层 因为充满油可以跑k条边 算上 开始的1 就是k+1层 首先 第x层图中的点[i,j] 连向第x+1层的点[i,j]的 边权为 0 如果该点不是加油站 第x层[i,j] 连向第x+1层[i,j+1] [i 阅读全文
posted @ 2022-04-12 09:12 wzx_believer 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 首先 具体有哪些点对我们是很好找到的 问题转化为 多次询问区间 有多少点对 对于多次区间离线询问 考虑定一边R 从左到右依次选择 对询问的R从小到大排序 这题树状数组还是很好想的 考虑一个点对【l,r】 一个询问【L,R】 如果r>R 那么这个区间一定不会考虑这个点对 所以有点对r<=R时才加入树状 阅读全文
posted @ 2022-04-11 15:59 wzx_believer 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 离线询问最大完美数列长度 这种[L,R]的题目一般都先定R 然后再一个线性递推 设f[i] 表示第i个数为完美序列结尾 开头最大的位置 明显f[]是单调递增的 明显以i结尾完美序列的最大长度就是 i-pos+1 再考虑一个询问[L,R] 对于f[i]>L的情况 就相当于询问区间最大值 特别的 可能最 阅读全文
posted @ 2022-04-11 15:02 wzx_believer 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 一道很早做过的题 其实很好感性理解 第一个数列的第k大 对应 第二个数列的第k大 那么问题就变为 用最少的步数 交换两个相邻的数 使得两数列一一对应 这就是一道逆序对的模板题 #include<bits/stdc++.h> using namespace std; #define lowbit(x) 阅读全文
posted @ 2022-04-10 17:56 wzx_believer 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 这道题因为每个字符串长度很小 我们直接就分解每个字符串的子串 还是很基础的 如果数据开大一点难度又会上升一个阶段 这个题连用了三道STL map vector set #include<bits/stdc++.h> using namespace std; #define lowbit(x) x&( 阅读全文
posted @ 2022-04-10 11:34 wzx_believer 阅读(76) 评论(0) 推荐(0) 编辑
摘要: 首先一看就知道是个小水题 出题人能不能准确描述 子串就是子串 什么叫连续子序列? 简而言之 找到一段颜色数量小于k且最长的子串 对每一个位置 维护一个pre数组 和endd数组 pre:在它前面离它最近的相同颜色的坐标 endd:在它后面离它最近相同颜色的坐标 初始L=R=1 不断地往后更新就好 # 阅读全文
posted @ 2022-04-09 15:10 wzx_believer 阅读(69) 评论(0) 推荐(0) 编辑
摘要: 经典的状压dp 先考虑横着放 如果横着放的方案确定了 那么竖着放的也就唯一确定了 所以总方案数=横着放的方案数 但是可能我们横着放完了后 留下的空间竖着放怎么都不能放满(也就是竖着连续对的0为奇数)不合法 这个我们可以预处理 定义方程:设dp[i,j]表示前i列已经放完横木块且第i列的状态为j的总方 阅读全文
posted @ 2022-04-07 15:23 wzx_believer 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 一个数列(保证是个数是偶数),前一半之和 与 后一半之和 如果相等 就称这个数列为开心数列 但是数列有些数字被擦掉了为'?' 现在M和B两人玩游戏 M先手,每一轮将'?'填0到9的数字 最终数列如果为开心则B胜利 如果不开心则M胜利 M和B都很聪明 给出数列求最终胜利者 分析 ans1表 阅读全文
posted @ 2022-04-06 23:09 wzx_believer 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 这个题几年之前做的时候就是不知道咋做 现在看起来就是一道简单的dp 首先枚举区间肯定是不行的 但是这个题目比较狡猾 数据范围给你2e5 迷惑你不往线性递推方面想 我开始想对每个点分析 分析他对答案会有什么贡献 以往有些题目就是这样的 但是发现没法分析 换个想法 考虑区间[L,R]固定R,依次dp就好 阅读全文
posted @ 2022-04-05 22:03 wzx_believer 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 条形:P1031 [NOIP2002 提高组] 均分纸牌 ※第一堆牌相差的牌只能由第二堆牌承担(给予或索要) ※第一堆牌都达到要求了又去动它干嘛 ※可以直接删除第一堆牌 ※第二堆牌神奇的变成了第一堆牌 ※重复上述操作 ※如果当前牌没操作就已经达标了跳过啊~ ※下副牌变成负数又怎么样? ※ ∵ 上述步 阅读全文
posted @ 2022-04-05 11:30 wzx_believer 阅读(49) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 10 下一页