自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hunxuewangzi的博客

一名正在努力的蒟蒻acmer

  • 博客(45)
  • 收藏
  • 关注

原创 牛客小白月赛23 C 完全图 题解(二分+__int128or long long 转double)

题目链接题目思路首先,一个完全图本身就是一个联通分量。若我们把他变成两个连通分量,最少要把某点和其他点的所有边都去除掉,也就是要去掉n-1条边。若我们把他变成三个连通分量,在剩下n-1个结点的连通分量上,最少要把某点和其他点的所有边都去除掉,也就是要去掉n-2条边,以此类推…我们发现规律后就很简单了,显然m越大,最后的答案也会越大,其具有单调性可以二分。我们设答案为ans,那么ans肯定...

2020-03-31 22:07:09 283

原创 牛客小白月赛23 G 树上求和 题解(贪心)

题目链接题目思路其实这题自己有思路了,但是最后没写代码却去看了题解实属不该。这题其实和周赛的一题很相似都是求贡献相似的周赛题此题需要从算贡献的角度思考,对于每条边对答案的贡献,等于其左边子树结点个数×右边子树结点个数×边长。因此我们先随便从一点DFS,预处理出每个子树的结点个数。再遍历所有的边。把左边子树结点个数×右边子树结点个数的积保存下来。从大到小排序,然后从前往后遍历一遍分别乘上...

2020-03-31 21:41:23 240

原创 牛客小白月赛23 I 寻找子串题解(字符串操作)

题目链接题目大意字符串的子串是指字符串中连续的一段。给定字符串s,请你找出字典序最大的子串。题目思路本题不难,答案肯定时后缀,但是如果不用字符串函数等技巧可能有些难写,巩固学习一下字符串操作代码1用string的substr函数#include<iostream>#include<string>using namespace std;string s,a...

2020-03-31 17:52:58 371

原创 牛客小白月赛23 B 阶乘题解(二分+质因数分解)

题目链接题目大意给定一个正整数p,求一个最小的正整数 n,使得 n! 是 p 的倍数题目思路1看到此题还是会想到质因数分解,但是没想到是需要p和n!都要质因数分解。可以把p分解的因子和次数用一个pair储存。然后可以发现其实这个题目是满足二分条件的。注意n质因数分解时那个变量j要设为long long 。因为可能会爆int,有关i,j在for循环里面是乘法操作的一定要注意很容易wa代...

2020-03-31 17:33:23 348

原创 周赛 种花 题解(数论)

题目链接题目大意n个人种花(环),给出每个人种花数量的可能区间,如果相邻两人种花数量的乘积为p的倍数,则两人各获得1000元,求所有人工资的期望值。如果答案是a/b 则写成a*inv[b]题目思路1:如何判断[L,R]中间有多少个p的倍数,不是很容易想但是仔细想想还是可以知道其实就是R/p-(L-1)/p2:这个题目没必要一次求出最终概率,用最小公倍数等等操作,直接逆元求解即可3:n...

2020-03-30 18:42:53 176

原创 牛客 算概率 题解+周赛 pph的篮球考试 题解(概率dp)

前言:这两个题目基本类似就直接放在一篇博客知识(a/b)%p=(ainv[b])%p; =》 (a1/b1+a2/b2)%p=(a1inv[b1]+a2*inv[b2])%p算概率题目描述代码#include<cstdio>using namespace std;const int mod=1e9+7;const int maxn=2e3+5;int n,a[...

2020-03-30 15:49:59 271

原创 周赛 摆蔬菜1 题解(线段树+二分or单调队列)

题目链接题目思路显然可以线段树+二分直接来,也可以单调队列,单调队列的代码要仔细研究主要为了研究单调队列的操作线段树代码#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>using namespace std;typedef long long l...

2020-03-29 19:36:10 192

原创 洛谷 P1886 滑动窗口 /【模板】单调队列(单调队列模板)

题目链接题目思路以最小值为例:构造一个单调队列b[i],记h为元素下标,b中存下标。第一次:b={1};第二次:b={1,2}(因为3>1且在范围内);第三次:b={3}(因为队列单调递增,-1最小,所以挤掉1和3,找最小值的时候也不会轮到它们);第四次:b={4}(1已经在外面了。-3<-1果断挤掉);第五次:b={4,5}(5>-3 可以作为候选人);第六次:...

2020-03-26 21:48:38 211

原创 AtCoder Beginner Contest 157 E - Simple String Queries (线段树+二进制 or 二维树状数组 or set+二分)

题目链接题目大意题意:有一个长度为N的字符串(只包含小写字母)。现有Q个操作,操作1是把第x位的字符改成y,操作2是查询[l,r]内去重后有多少个字符。前记这个题目个人认为很有研究的必要。我将用三个方法来写这题线段树+二进制首先看到单点操作和区间查询,很容易想到线段树操作。但是一直没想出,后面看别人代码明白可以用二进制操作。把a−z用0−25表示,再把他们用二进制位表示,就可以用或...

2020-03-26 14:42:05 265

原创 周赛 厂里吃鸡王 题解(多起点bfs)

题目链接题目大意有n个城市,m条路也就是双向边(边可能重复和自环),每个城市都会生产1种装备(不同城市之间的装备可能相同)共有k种不同的装备每种装备都需要小姐姐送过来。求每一个城市获得k种装备的最短路题目思路装备最多100种,可以计算每种装备到每个城镇的最短路。直接将所有生产i型商品的城市一次性全加入队列。然后bfs最多100次bfs即可。满足题目要求易错警示1:双向边一定要记得开...

2020-03-25 16:34:52 207

原创 AtCoder Beginner Contest 158 F - Removing Robots题解(dp)

题目链接题目大意N个机器人,第i个机器人在Xi位置上,若一个机器人被激活,则它将向右移动Di。若途径别的机器人,则该机器人也将被激活,求可以得到多少个没被激活的机器人的集合(激活次数不限)(对998244353取模)注意途径的机器人被激活的条件是距离和他必须要小于(或间接小于)di。等于不行题目思路肯定首先要按照机器人的位置升序排序。然后逆向dp令dp[x]代表x~n的集合数,当第x...

2020-03-24 14:17:11 232

原创 AtCoder Beginner Contest 158 E Divisible Substring 题解(思维+取余)

题目链接题目大意给一个字符串(由数字‘0’~‘9’组成),一个素数p,问有多少个非空的连续子串是p的倍数题目思路此题感觉比较神仙吧,第一次见这种题目,以后要多积累看到题目中余数是质数就是仔细想想和取余有关的问题abcd % p = ( a * 1000 % p + b * 100 % p + c * 10 % p + d * 1 % p ) % p那么考虑从后往前算余数,并且记录余数...

2020-03-23 23:38:14 239

原创 AtCoder Beginner Contest 159 E - Dividing Chocolate 题解(思维+枚举+状态压缩)

题目链接题目思路其实要观察这个题目的数据范围,会发现有蹊跷行数那么少,暴力搜行的切割方法.然后扫描列,对于一定要切的地方就切.复杂度O(2^n *(n∗m))注意枚举行的状态只有1<<(h-1) 因为最多切割h-1条代码#include<cstdio>#include<algorithm>using namespace std;const in...

2020-03-23 15:25:06 400

原创 周赛 战域 题解(优先队列+思维+贪心)

题目链接题目思路将x+1后函数的差值放入优先队列,每次的话就贪心选最小的,然后再更新差值放入队列中维护。其实说白了就是把m分为m次加1,每次都贪心选择最小的那份。但是结构体每次使用后都要改变,每次sort都会用时间。而优先队列可以解决这个问题优先队列是STL中比较重要的一个部分,用起来非常方便,在很多排序题中要比sort一遍一遍排序快很多。它能根据自己定义顺序来进行排序。主要的两种表...

2020-03-22 18:01:47 201

原创 洛谷 P1387 最大正方形 题解 (dp)

题目链接题目思路动态规划状转方程:if (a[i][j]==1) f[i][j]=min(min(f[i][j-1],f[i-1][j]),f[i-1][j-1])+1;说明:f[i][j]表示以节点i,j为右下角,可构成的最大正方形的边长。只有a[i][j]==1时,节点i,j才能作为正方形的右下角;对于一个已经确定的f[i][j]=x,它表明包括节点i,j在内向上x个节点,向左x...

2020-03-22 11:16:28 187

原创 Codeforces 1325 C. Ehab and Path-etic MEXs(贪心构造)

题目链接题目大意给定一棵树,有n个节点,现在为每个节点所在的边编号为0~n-2问你怎样编号使得树上任意两点u,v的最大mex(u,v)值最小mex(u,v)是指树上从u到v的一条简单路径上第一个没有出现的数字例如:假设这条路径有1,2,3,4 那么第一个没有出现的就是0题目思路这个题目我一点思路都没有,题目都没看懂进入正题1.如果他就一条链,n-1条边从头到尾的mex(u,v) ...

2020-03-20 11:35:18 155

原创 Codeforces 1325 D. Ehab the Xorcist (异或)

题目链接题目大意给出一个 u 和一个 v ,要求构造出最短的一个数组,使得所有元素异或的结果为 u,所有元素之和的结果为 v。注意输入为 long long题目思路看到此题我一点思路都没有最近写题目感觉有一个规律,如果数据开到long long那么基本都是分类讨论。因为元素范围多,所以时间复杂度,我觉得基本都是o(1)o(log(n))的复杂度我还没见过正题首先先了解一个知识点:...

2020-03-19 20:25:02 178

原创 洛谷 P4933 大师 题解(dp)

题目链接题目思路设置 dp[ i ][ j ] 表示以 i 结尾公差为 j 的等差数列个数你可能会想为什么是 i 结尾而不是开始呢,其实你会发现如果设以 i 开始根本不知道怎么设状态转移方程注意转移方程要设置偏移量p,要不然数组可能就会负数。所以数组开大两倍。还有要注意ans加的不是dp[ i ][ a[ i ] - a[ j ] + p ]因为可能后面这个式子还会变化,那么就会加两次...

2020-03-18 16:58:30 207

原创 洛谷 P2758 编辑距离 题解(dp)

题目链接题目思路本来我以为这个题目是和最长子序列有关,用max(da,db)-最长子序列的长度,但是我果然太菜了随便一组数据就足以证明这个思路是错的如 rcpw wbl 答案应该是4,而我的答案是3进入正题设两个字符串A,B 用一个二维数组f存储状态 一维存A串 一维存B串 一共有如下四种操作:删:可以看做把A串最后一个字符删去后不再考虑这个字符 所以f(i,j)=min(f...

2020-03-18 11:22:22 168

原创 洛谷 P1439 【模板】最长公共子序列 题解(最长公共子序列+最长上升子序列 dp)

题目链接题目思路首先不要被这个题目的名字给欺骗了。本来看题目确实是最长公共子序列的裸题。但是观察到n为1e5,而最长公共子序列的复杂度为n方。而且这两端序列的数字都是一样。显然要换一种思路首先,我们可以想到,最长公共子序列,就是两段所含数字完全一样,并且数字的顺序也是完全一样的序列。而顺序,我们可以想到类似哈希的思想,考虑建立一个类似map的关系数组f[ai]=i,那么我们找到的序列只...

2020-03-17 20:35:33 221

原创 洛谷 P4017 最大食物链计数 题解(拓扑排序+记忆化搜索)

占坑

2020-03-16 16:45:04 275

原创 唯一分解定理+周赛 简单博弈 (快速幂+唯一分解定理)

唯一分解定理感觉这个定理是显然的。。。写出一个裸题题目链接代码#include<cstdio>using namespace std;const int maxn=1e4+5;int n,prime[maxn],a[maxn];int main(){ for(int i=2;i<=1e4;i++){ if(!prime[i]){ ...

2020-03-16 16:32:22 189

原创 周赛 一步两步 题解(dp)

题目链接题目思路其实是一个很简单的dp,但是不知道为什么自己又没有思路,dp杀我我们注意每一次移动只能往相邻的顶点移动一位,因此我们可以考虑 dp。二维dp[ i ][ j ] 表示第 i步站在 j 这个顶点的方案数,然后可以发现它是从 ( 与 j为相邻顶点)转移 过来。给顶点标号还要注意会卡空间。必须一维数组代码#include<cstdio>#include&l...

2020-03-15 19:14:24 143

原创 周赛 区间异或 题解(找规律)+异或知识讲解

一:异或的含义或在数学中的含义:一个元素在集合A中或在集合B中,或的维恩图如下:而异或是不允许共存的,所以 A ^ B 的维恩图如下:同理对于 A ^ B ^ C 维恩图:...

2020-03-15 17:42:06 732

原创 周赛 直线重合 题解(用分数代替小数完全避免浮点误差)

题目链接题目思路本来是用浮点数写,但是发现浮点数一定有浮点误差,学长卡死了double ,这时必须换一个思路。其实k,b可以用分数储存,那么可以完美的避免避免浮点误差。注意:1:本来我以为会出现 1/-2!=-1/2 的情况,后面仔细一想发现不可能,以为假设分子为1分母为-2,分子为-1,分母为2的两组数。他们的gcd也会相反所以除以gcd之后又相等了。2:还有排序要注意要所有元...

2020-03-15 15:51:51 159

转载 如何快速转载CSDN中的博客

前言  对于喜欢逛CSDN的人...

2020-03-13 22:43:34 106

原创 CF #627 div3 E. Sleeping Schedule 题解(dp)

题目链接题目大意一个人要睡n次,一天有h个小时,可以选择睡a[ i ]个小时或者a[ i ]-1个小时,起来之后又马上睡。如果起来的时间在L和R中间(闭区间),则答案加1,求最大的答案。题目思路显然是要用dp的思路,但是自己实在太菜,根本不知道怎么用,这次也算学习一下dp吧进入正题:显然这个题目答案和前 i 个中有 j 个选减1有关,那么可以设dp[ i ][ j ] 表示前i个中...

2020-03-13 14:52:30 526 4

原创 NOI 2.6基本算法之动态规划 9272:偶数个数字3 (简单dp)

题目链接题目大意在所有的N位数中,有多少个数中有偶数个数字3?注意要对12345取模题目思路显然是dp,注意最后要分类讨论代码#include<cstdio>using namespace std;long long n,dp[1010][2];int main(){ scanf("%lld",&n); dp[1][0]=8,dp[1][1...

2020-03-12 14:33:35 372

原创 Bribe the Prisoners(Easy) 题解(区间dp)

题目链接占坑

2020-03-12 12:16:43 159

原创 洛谷 P3811 【模板】乘法逆元 题解(逆元递归法)+ 周赛 他们说要我出一道签到题(组合数+卡特兰数)

题目链接题目思路显然是求逆元,但是直接求所有的逆元,用扩偶显然会tle,这个时候就需要0(n)的时间度算法注意最后的递推式为(p-p/i)加上p不会对答案有影响,而且防止负数。代码#include<cstdio>using namespace std;const int maxn=3e6+5;int n,p;long long inv[maxn];int main...

2020-03-11 17:55:59 215 1

原创 周赛 辛勤的蚂蚁 题解(LCA)

题目链接题目思路显然是在树上找最短路的文通,那么就要想到lca因为所有由 s->t的路径我们都能看成 s ->lca(s,t)->t。很明显 s->lca(s,t) 和 lca(s,t)->t 都是一条链。关键 :L( s ,t )=depth( s )+depth( t )-2*depth ( lca ( s , t ) )最后要注意分类讨论即可,由于每两...

2020-03-10 17:05:04 167

原创 周赛 厂里田径赛 题解(线段树)

题目链接题目大意其实就是找前面有多少个比他小的数题目思路显然要用线段树,是裸的线段树,但是不知道为什么自己却一点思路都没有。对于能力值建立一颗线段树or 树状数组, 按编号从小到大枚举每个运动员,每次先查询当前能力值在[1,a[i]-1] 的人数及第i个人的结果,然后再将这个人的能力值更新进去(让能力值为a[i]的人数+1).注意询问的时候要加一句 if(L==R) return 0...

2020-03-10 11:50:49 113

原创 打包商品 题解(并查集)

题目链接题目思路其实看到合并就要想到并查集,但是自己还是不知道怎么写,其实也相当于是一个裸题,把sm数组和bi数组初始化为自己的值。然后再更新是一样的操作,还有更新最大值和最小值的情况只要更新祖宗节点就可以,不要全部跟新,要不然就出锅(我就wawawa了还有题目有一个找最小编号的操作,其实完全没有必要用一个数组,直接联合的时候让自己父亲节点的值小就好。还有合并的时候一定注意是祖宗节点合并...

2020-03-09 20:05:09 180

原创 暴力出奇迹 题解(贪心)

题目链接题目大意题目意思其实很简单就是要注意有两次累加得过程,L,R可以变化,L和R里面得i也可以变化(所以我就一直没看懂题题目思路我们会发现,最终结果中 aibi 的值会被 计算 i(n-i+1)次.你可能想问为什么是这么多次呢左边包括自己有i个数,右边有包括自己有n-i+1个数,那么就很容易理解了。左右两边得数分别为L,R自己就会被算进去自己还是数学太菜我们不妨把这个值与ai合...

2020-03-09 18:13:13 182

原创 拓展欧几里得讲解

前记说拓展欧几里得前先说欧几里得。欧几里得其实就是求a,b得最大公约数。代码如下,代码简单,不做解释。int gcd(int a,int b){ if(b==0) return a; return (b,a%b);}正题现在我们知道了 a 和 b 的最大公约数是 gcd ,那么,我们一定能够找到这样的 x 和 y ,使得: ax + by = gcd 这是一个不定方程...

2020-03-09 15:47:56 155

原创 卡特兰数

卡特兰数是一种经典的组合数,经常出现在各种计算中,其前几项为 : 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796。卡特兰数的公式公式一递推公式h(0)=h(1)=1h(n)= h(0)*h(n-1)+h(1)*h(n-2) + … + h(n-1)*h(0) (n>=2)如果我们用这个公式显然我们要使用递归算法,那么数据一大就在时空上很麻...

2020-03-08 17:26:22 358

转载 洛谷 P5788 【模板】单调栈(单调栈模板)

题目链接原文链接题目大意找第 i 个元素之后第一个大于 a[ i ]​ 的元素的下标题目思路首先可以把题目思路转化一下。有n个人,每个人向右看,求她看到的第一个人。 如图通过观察,我们会发现,在她后面的,比她矮的,一定会被她遮住。那么,这个点就没用了。而根据现实生活和刚才的推断,我们看到的人肯定是一个比一个高的,而没看到的,留着也没用,直接扔了。那么,这就是符合单调性的。再看,那些...

2020-03-07 16:54:58 413 1

原创 洛谷 P1967 货车运输 题解(lca+kruskal)

前记最近lca+kruskal的题目真让我疯了,我还是太菜了题目链接题目思路显然是找到最大生成树,然后lca求解。自己其实想到了怎么写,但是就是dfs()的那一步和init()的初始化不会。总之是属于代码实现能力太弱导致而成的。里面有许多需要注意的地方都在代码里面说了代码#include<bits/stdc++.h>using namespace std;const ...

2020-03-06 20:41:23 148

原创 洛谷 P4180 [BJWC2010]严格次小生成树 题解(次最小生成树模板)

先占坑

2020-03-06 10:57:34 140

转载 洛谷 P3379 【模板】最近公共祖先(LCA) 题解

题目链接原文链接注:对原文有些改动删除不必要部分LCA讲解概念:LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先。倍增算法所谓倍增,就是按2的倍数来增大,也就是跳 1,2,4,8,16,32 …… 不过在这我们不是按从小到大跳,而是从大向小跳,即按……32,16,8,4,2,1来跳,如果大的跳不过去,再把它调小...

2020-03-05 16:31:54 184

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除