自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2021SCUACM新生赛k-Gym

2021SCUACM新生赛k-Gym 题目描述InputOutputExamples分析代码题目描述LuckAAA喜欢打炉石,而且是忠实的牧师玩家,他想要收集齐牧师的所有橙卡。 炉石传说目前有n 种牧师橙卡,由于LuckAAA是豹子头零充,又肝不出很多金币,于是他修改了炉石的开包机制,每次开包一定会开出牧师橙卡(所有牧师橙卡中,等概率获得一种,即使已经有了某一种还是可能被抽到,概率均为1/n),但代价是一包只能开出一张。 求LuckAAA每种都收集至少一张时开包数量的期望。Input一个整数 n(1

2021-12-12 10:46:01 450

原创 【NOIP2019集训第十一场19.10.20】

T1 遭遇分析动态规划先按照高度h从小到大排序f[i][j]f[i][j]f[i][j]表示最后一次从第i个节点跳,一共跳了j次的最小代价状态转移方程:f[i][j]=min(f[i][j],f[k][j−1]+a[k].c)f[i][j]=min(f[i][j],f[k][j-1]+a[k].c)f[i][j]=min(f[i][j],f[k][j−1]+a[k].c) (k&l...

2019-10-21 19:02:08 335

原创 【NOIP2019集训第十场19.10.15】题解

T1 列队分析带权并查集f[i]f[i]f[i]表示节点i所在集合,d[i]d[i]d[i]表示节点i到所在集合代表节点的距离。对于一组描述,查询L,R是否在同一个集合中1.若在同一集合中,判断是否矛盾 若:d[r]−d[l]!=zd[r]-d[l]!=zd[r]−d[l]!=z(z代表当前描述的D)则矛盾2.若不在同一集合中,将L,R加入到同一集合中,不妨让R所在集合并到L所在集...

2019-10-15 20:39:44 310

原创 NOIP2019集训9.24 day2题解

T1 林下风气100pts树形DP枚举每一个点作为根节点,并且将当前点的值设为联通块的最大值st,向下搜索子节点a[j],a[j]满足条件0<=st-a[j]<=k;若当前j不满足条件,就return。否则继续向下统计满足条件的子树个数。而对于搜索的每个节点的返回值为所有子树返回值+1的乘积(由乘法原理得到最大值与最小值相差<=k的总方案数)。再按照以上思路搜索最大值...

2019-09-24 19:05:29 290

原创 【NOIP2016提高组 day2】T1组合数问题

题解组合数公式:c[i][j]=c[i-1][j]+c[i-1][j-1]打表发现其实就是杨辉三角,不过这样好像只有60分优化:1.边计算边取模2.用前缀和思想,ans[ ][ ]表示满足条件的个数if(c[i][j]%k==0)ans[i][j]=1;else ans[i][j]=0;ans[i][j]=(ans[i][j]+ans[i][j-1]+ans[i-1][j]-a...

2019-09-22 17:59:28 377 2

原创 NOIP模拟赛2019.9.21题解

T1 小猫爬山(climb)1000ms 131072KB【description】Freda 和 rainbow 饲养了 N 只小猫,这天们要去爬山 。经历了千辛万苦,小猫们 终于爬上了山顶,但是疲倦的它们再也不想徒步走下(呜咕 ><>< )。Freda 和 rainbow 只好 花钱让它们坐 索道 下山。 索道 上的缆车 最大承重量为 W,而 N 只小猫的重量分...

2019-09-21 16:01:02 748

原创 NOIP模拟赛2019.9.14题解

T1 刺客信条(AC)100pts并查集+二分答案要使最小距离最大化。对于每次二分的最小距离d,两两计算所有教徒的距离,若这个距离小于d*2,那么这两个教徒连一条边(加入到同一个并查集中),代表一个障碍,即不能从这两者之间经过。并把和边界的距离小于d的教徒与边界连边。当所有的障碍全部连起来能够挡住从(0,0)到(x,y)的路,则此情况不成立。挡住路有四种情况:上下边界在同一个并查集;左右...

2019-09-14 23:09:45 209

原创 NOIP模拟赛2019.8.30题解

T1 最大序列100pts维护一个栈从前往后扫描,如果栈为空或当前数及之后数中的最大值大于栈顶的数,就将最大值之前的所有数入栈,并且把最大值保存在答案中。否则将栈顶的元素弹出,并保存在答案中。由于最大值从后往前是单调递增的,所以直接用一个数组维护就可以O(1)查询代码如下:#include<bits/stdc++.h>using namespace std;const...

2019-08-31 10:20:19 205

原创 NOIP模拟赛2019.8.29题解

T1 列队100pts二分图匹配 求最大独立集把不好惹的同学的行和列连边,并分别放入二分图的两个集合中。因为不好惹同学的行和列只能任选其一,而我们要使选出的所有行和列总和最大,就用选出的所有的行和列总数减去最小的不选的行和列的总数(最小点覆盖)。又 最大独立集=n-最小点覆盖=n-最大匹配数。所以用匈牙利算法求一遍最大匹配数,再用总的行列数减去就可以了。代码如下:#include...

2019-08-29 16:35:40 218

原创 NOIP模拟赛2019.8.28题解

T1 地球发动机(earth)50pts动态规划f[i]f[i]f[i]表示选择第i台发动机作为最后一台发动机,前i台发动机最大的总功率f[i]f[i]f[i]可以从f[j]f[j]f[j]转移,当且仅当a[j]+x[j]&lt;a[i]a[j]+x[j]&lt;a[i]a[j]+x[j]<a[i]对于每一个iii扫描小于iii的所有jjj,转移DP。后面几个点...

2019-08-28 16:56:41 363

原创 NOIP模拟赛2019.8.22题解

T1 指引(guide)100pts将旅行者和城市的坐标都存储在一个结构体数组中。按照x从小到大排序。扫描到旅者时,把y值放入set中;扫描到城市时,找set中最大的小于等于当前城市y的值,找到了ans++,并且删除这个值。(因为一开始x从小到大排序保证了set中保持的旅者的x都小于当前城市)。查找用lower_bound/upper_bound,如果直接扫描会T一个点。代码如下:...

2019-08-27 22:29:47 251

原创 NOIP模拟赛2019.8.27题解

T1 绿洲(oasis)100pts对于每一个绿洲,spfa最短路求每个城市到它的最短距离。再更新离城市最远的绿洲距离。代码如下:#include<bits/stdc++.h>using namespace std;const int N=100005,inf=0x3f3f3f3f;int n,m,k,a[N],v[N],d[N],ans[N],tot=0,head[N...

2019-08-27 22:23:07 782

原创 NOIP模拟赛2019.8.26题解

T1 死宅与陷阱用DFS预处理出每个节点被走道的概率(注意每个节点可能会被多条路到达)然后sort排序,贪心把炸弹放到除起点外概率最高的的点。代码如下:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=100005;int n,m,p,s,t,head[N],tot=...

2019-08-26 18:37:50 206

原创 NOIP模拟赛2019.8.20题解

T1 妹子70pts直接比较,若其中一个矩形的较长边大于另一个矩形较长边,较短边大于另一个矩形的较短边,则可以。100pts较小的矩形还可以通过旋转放到另一个矩形中,枚举旋转的角度a(0°<a<90°),看是否满足题意。代码如下:#include<bits/stdc++.h>using namespace std;const double pie=acos...

2019-08-21 11:38:59 225

原创 2019暑假正睿集训8.11day8题解及总结

T1 抽象代数题真·构造题100pts⾸先容易发现只要做到⼀个⽀持[2…n][2…n][2…n]循环移位和(1,2)(1,2)(1,2)交换 的排列,就可以完成整个事情,即每次把待交换的数字放 到111号位,然后把另⼀个数字放到222号位,交换即可。但这样的时间复杂度是O(n2)O(n^2)O(n2)级别的,因为要做很多次循 环移位操作。我们可以构造类似循环左移1位,3位,9...

2019-08-11 22:35:38 279

原创 超详细易懂FFT(快速傅里叶变换)及代码实现

前言昨天学了一晚上,终于搞懂了FFT。希望能写一篇清楚易懂的题解分享给大家,也进一步加深自己的理解。FFT算是数论中比较重要的东西,听起来就很高深的亚子。但其实学会了(哪怕并不能完全理解),会实现代码,并知道怎么灵活运用 (背板子) 就行。接下来进入正题。定义FFT(Fast Fourier Transformation),中文名快速傅里叶变换,是离散傅氏变换的快速算法,它是根据离散傅氏变...

2019-08-11 18:29:24 157098 37

原创 2019暑假正睿集训8.10day7题解及总结

T1 松50pts~80pts这道题直接暴力搜索,每次在三个符号中任选一个,按题意合并数。当合并了还剩两个数的时候,就判断它们选哪种符号最终能为1,找到一种ans+1100pts优化1:位运算。把输⼊串按照FFT初始化⽅法⼀样bitrev⼀ 下就可以⽤位运算优化。优化2:四⽑⼦。当串⻓之后16的时候预处理。 ~~~~ 可能要稍微松⼀下,也可能不⽤。~~为此我今天学了三个多小时的FFT(...

2019-08-10 22:57:03 284

原创 2019暑假正睿集训8.9day6题解及总结

题解T1 蔡老板与公司70pts维护所有区间的左边,维护一个栈,如果当前元素和栈顶元素一样,可以配对消掉,否则放到栈顶。时间复杂度:O(n2)O(n^2)O(n2)代码:#include<bits/stdc++.h>#define N 1000005using namespace std;typedef long long ll;char s[N],sta[N];...

2019-08-10 15:37:47 285

原创 2019暑假正睿集训8.8day5题解及总结

题解T1 小D与子序列100pts动态规划(背包)题意:选尽量少的数字,使其总和等于给出的数m,并在此基础上使选出的最大的数和最小的数的差值最小先对所有数字从小到大排序,因为选的是子序列而非子串,所以与数字原来所在的位置无关。f[i]表示选出的数字和为i时取数的最小个数;mi[i]表示选出的数字和为i时选出的最小的数ma[j]表示选出的数字和为i时选出的最大的数状态转移方程如下:...

2019-08-10 15:36:40 228

原创 2019暑假正睿集训8.7day4题解及总结

T1 猫40pts动态规划我在考场上也写出了这个,状态转移方程都几乎一模一样,然而边界写错了(就是k的初值)就爆零了~~,太伤心了TOT~~对于一只猫 (hi,ti),设工作人员从0时刻出发,猫i等待的时间为a[i]=t[i]-d[h[i]];有题意可知,猫等待的时间必须大于等于0,即工作人员到达猫i的时间必须大于等于t[i];设 vali=ti−∑j=2hidjvali = ti- ...

2019-08-10 15:33:54 182

原创 2019暑假正睿集训8.6day3题解及总结

T1 小K与赞助20pts直接模拟题意,让球往下掉100pts本质:序列的切割和合并操作每个小短棍的作用,交换两个数情况一:奇数位置的数和偶数位置的数分别维护一个序列,直接交换两个序列例如:1 2 3 4 5 6 变为情况二:除了开头和结尾中间的偶数位置的数和奇数位置的数分别维护一个序列例如 1 2 3 4 5 6 变为 1 3 2 5 4 6有删除,在以上基础上删除(对于每个...

2019-08-10 15:32:35 220

原创 2019暑假正睿集训8.5day2题解及总结

题解T1 小K与赞助题目分析:一张图里两棵树,每个人选择一个点集,两个人选的点集不想交,求最大权值8~21pts直接暴力枚举 两个节点不想交47~65pts只考虑两棵树完全一样的情况:树形DP(背包)dp[i][j][j][k]dp[i][j][j][k]dp[i][j][j][k]表示以i为跟的子树,在第一棵树上选j个,第二棵树上选k个点的最大利润。时间复杂度:O(n3)O(...

2019-08-10 15:29:32 314

原创 2019暑假正睿集训8.4day1题解及总结

题解T1 小K与集合贪心先考虑最简单的情况:如果有k个1,把它们分到k个集合里,那么无论如何少一个1可以用k个2来补,少一个2用k个3来补(类似于k进制下的进位思想。)因此:k个i+1等同于 1个i的贡献对于给定的序列 变成长度k个部分,每个里面至少含有1个1(或者与1等价的k个2或,k*k个3…以此类推)每个部分都是1k的贡献\frac{1}{k}的贡献k1​的贡献直接从后往前...

2019-08-10 15:26:53 743

原创 【NOIP2013提高组 day2】华容道

分析这道暴搜题实在是太毒瘤了…….改了一下午加一个晚自习,终于在大佬的帮助下过了orz只需要保存空白块和指定块的状态先bfs预处理出空白块从当前状态(与指定块相邻的上下左右的某一格子)到其他状态(与指定块相邻另外三个方向的格子)的最短移动步数和与指定块交换的步数,将其保存在边集数组中(点代表当前状态和其他状态,边代表最短步数)。由于空白快最开始不一定在指定块周围,因此,对于每一次询问...

2019-07-23 22:07:33 284

原创 【NOIP2013提高组 day2】花匠

分析直接贪心(据说动态规划也可以orz)保留的花要么左右两边高度都比它高,要么左右两边高度都比它低。因此一段连续上升的序列和一段连续下降的序列只保留一个转折点。注意答案还要加开头和结尾的点。代码如下#include<bits/stdc++.h>using namespace std;const int N=100050;int n,a[N],ans;int rea...

2019-07-23 21:59:59 478

原创 【NOIP2013提高组 day2】积木大赛

分析直接贪心最开始ans=a[1]若a[i]>a[i-1] ans+=a[i]-a[i-1]否则不改变ans的值代码如下#include<bits/stdc++.h>using namespace std;const int N=100050;int n,a[N],ans;int read(){ int sum=0,f=1; char ch=g...

2019-07-23 21:54:40 165

原创 【NOIP2018提高组 day2】保卫王国

分析树形DP+lca树上倍增问题转换为:一棵树上,可以花代价把P[I]代价选取顶,要求任2个相邻点至少有1个被选取。给出m组询问,每次强制两个点的状态(选/不选),求出每次的最小花费。用dp[0/1][u]表示点u不选/选,以u为根节点的子树的答案的最小值。设v为u的一个儿子,就得到一个状态转移方程:dp[0][u]=∑dp[1][v]dp[1][u]=∑min{dp[0][v]...

2019-07-23 21:31:25 431

原创 【NOIP2018提高组 day2】旅行

分析分两种情况讨论情况一:m=n-1直接贪心从1节点向下dfs 每次选取编号最小的边情况二:m=n图中有且有一个环,并且无论如何都有一条边不会被遍历到。可以通过每次删除一条边,变成情况一,再dfs,更新字典序更小的最终答案。也可以进一步优化,即删边前先判断这条边在不在环上(不过本题数据范围不用优化也可以过啦)代码如下#include<bits/stdc++.h>...

2019-07-23 21:25:45 1102

原创 【NOIP2018普及组】对称二叉树

分析就是一道 纯爆搜 (并且代码非常简洁)不知道为什么放在第四题 被摆渡车卡了半天的我QAQ先跑一遍dfs预处理出所有子树的大小sum[]从1到n,以每一个节点为跟节点向下搜索,判断是否是对称二叉树,不断更新满足条件的最大sum[]值设当前节点为x, l[x], r[x]分别代表当前节点的左右子节点dfs(l[x],r[x])每个向下比较:1.若两个子节点值都为-1则返回t...

2019-07-23 21:19:06 634

原创 【NOIP2018普及组】摆渡车

蒟蒻感言这道题真的是普及组的难度?!(自闭怀疑人生orz)分析动态规划(真的特别玄学,想不出来只能打爆力了)先对每个人开始等候的时间从小到达排序,并保存当前时间的人数F[ I][ J ]表示第i个人等了刚好等了J分钟的时刻,前I个人已经到达B地(/上车),所需要的最少总等候时间。每个人等待的不会超过m ,即 0<=J<m第k个人的等待时间是:Tmp=max( t[i...

2019-07-23 20:04:58 849

原创 【NOIP2018普及组】龙虎斗

分析算出龙方和虎方气势差tot若tot=0 p2=m若tot>0 i=m-tot/s2; j=i-1; 把p2放在i或j上(比较放在哪个位置使最后气势差最小)若tot<0 i=m+tot/s2; j=i+1。i=min(n,i);j=min(n,j)。同理把p2放在i或j上。代码如下#include<bits/stdc++.h>using name...

2019-07-23 19:57:33 155

原创 【NOIP2018提高组 day1】赛道修建(超详细QwQ)

分析树的直径+二分+multiset有序多重集(其实可以把multiset换成vector 不过要慢一些)先用树形DP(或者两次DFS)求树的直径,作为二分的右边界r;树上最短的边作为二分的左边界l二分最短赛道的长度mid=(l+r)/2check(mid)函数中判断是否有至少m条赛道满足长度>=mid如何判断?把1号点作为根节点(选取任意一条点作为根节点都可以),向子树...

2019-07-21 19:11:35 494

原创 【NOIP2018提高组 day1】货币系统

分析完全背包问题寻找与货币系统(n,a) 等 价的货币系统 (m,b) 中,最小的 m等价于 在(n,a)中寻找m个数(m<=n),使这m个数能表示(n,a)中的所有数。首先,对a[ ]从小到大排序F[a[i]]=0/1表示 数a[i]能否被a[1]~a[i-1]组成的货币系统表示初始状态: F[]=0; F[0]=1;ans=0;状态转移方程 F[ j ] | = F...

2019-07-21 19:01:29 566

原创 【NOIP2018提高组 day1】铺设道路

分析和 NOIP2013day1T1积木大赛 有异曲同工之妙(QWQ)直接贪心初始状态:ans=a[1];if (a[i]>a[i-1]) ans+=a[i]-a[i-1] (2<=i<=n)(否则不改变ans的值)就是这么简 玄 单 学代码如下#include<bits/stdc++.h>using namespace std;type...

2019-07-21 18:54:31 232

原创 【NOIP2016提高组 day1】换教室

分析动态规划设F[ i ][ j ][ k ]表示当前是第i天,一共换了j间教室,k=0或1表示第i天是否换了教室有以下四种情况情况一:第i天换了教室,第i-1天未换...

2019-07-18 21:14:48 305

原创 【NOIP2016提高组 day1】天天爱跑步

分析这道题思维程度实在高 (反正蒟蒻在考场上打不出来orz)本不该是第二题的难度QWQ运用LCA+桶+树上差分对于当前点x,找出对它所有有贡献的点(是起点,并且能够在w[i]时间到达i点)先用树上倍增/Tarjan求出所有起点s[i]和终点t[i]的LCA,并用dis[i]数组保存s[i]到t[i]的距离。怎么找对每一个点有贡献的点呢?设起点u,终点v,u和v的最近公共祖先l...

2019-07-18 19:52:44 1697

原创 【NOIP2016提高组 day1】玩具谜题

【NOIP2016提高组 day1】玩具谜题分析代码如下分析直接模拟可以从0开始保存(便于取模)代码如下#include<bits/stdc++.h>using namespace std;const int N=100005;int n,m,a[N];string c[N];int main(){// freopen("toy.in","r",st...

2019-07-18 19:16:07 424

原创 【NOIP2013提高组 day1】货车运输

分析先求最大生成树,把一些多余的边去掉求最近公共祖先LCA 可用树上倍增的方法 (Tarjan好像也行不知道会不会超时询问前处理w[i][j]=min(w[f[i][j-1]][j-1],w[i][j-1])最后对于询问的x,y返回ansans=min(ans,w[i][j]) (w[i][j]在x,y到lca(x,y)路径上)可能有一点点玄学,具体看代码就清楚 更玄学 啦~代码...

2019-07-17 22:55:56 155

原创 【NOIP2012 提高组 day2】借教室

分析二分+差分+前缀和=二分当前到第几个申请人c[i]为差分数组设租借开始日期为x ,终止日期为y,租借数量为wc[x]+=w ; c[y+1]-=w;对差分数组求前缀和:sum[i]=sum[i-1]+c[i] 此时sum[i]代表第i天要租借的教室总数若大于r[i],返回false全部求完后所有sum[i]若都小于r[i],就返回true二分答案提高效率真的重要or...

2019-07-17 22:31:23 189

原创 【NOIP2012 提高组 day2】同余方程

分析数论原式可以转化为ax+by=1用拓展欧几里得算法求这个方程中x的最小值代码如下#include<bits/stdc++.h>using namespace std;typedef long long ll;ll a,b,x,y;ll read(){ ll sum=0,f=1; char ch=getchar(); while(ch>'9'||ch&...

2019-07-17 22:22:11 233

空空如也

空空如也

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

TA关注的人

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