【五校联考5day1】登山】的更多相关文章

题目 描述 题目大意 给你一个n∗nn*nn∗n的网格图.从(0,0)(0,0)(0,0)开始,每次只可以向右或向上移动一格,并且不能越过对角线(即不能为x<yx<yx<y). 网格图上面有一些障碍,不能经过障碍. 问从(0,0)(0,0)(0,0)到(n,n)(n,n)(n,n)的方案数 思考历程 说实话这题没有怎么特别仔细地思考过. 因为后面两题比较水,于是我就先做后面两题.可是后面两题的码量都有点大,于是没有时间了. 剩下的一点点时间里面完成30分暴力. 叫我半个gjy. 正解 先…
[五校联考1day2]JZOJ2020年8月12日提高组T2 我想大声告诉你 题目 Description 因为小Y 是知名的白富美,所以自然也有很多的追求者,这一天这些追求者打算进行一次游戏来踢出一些人,小R 自然也参加了. 这个游戏有n 个人参加,每一轮随机选出一个还没有出局的人x,接着x 会出局.x 在出局之后剩下的人会受到一次攻击,每一个人在遭到攻击之后会有p 的概率出局.(注意遭到攻击出局的人是不能攻击剩下的人的) 在所有人都出局之后,遭受攻击次数等于特定值的人能够成为胜者.所以现在小…
[五校联考1day2]JZOJ2020年8月12日提高组T1 对你的爱深不见底 题目 Description 出乎意料的是,幸运E 的小R 居然赢了那个游戏.现在欣喜万分的小R 想要写一张明信片给小Y,但是因为小R 非常羞涩,所以他打算采用一些比较神奇的方式来表达. 他定义了一些字符串,s1 = a,s2 = b,si =s_i-1 + s_i-2 (i >=3).同时他定义了一个字符串s 的权值为一个最大的i <|s|满足s 长度为i 的前缀等于长度为i 的后缀.比如字符串aba 的权值就是…
题面 \(solution:\) 讲真吧,这道题真的出得,嗯,太恐怖了.考场上这道题真的把我看懵了,这道题以前是见过的,但欧拉函数?我学过吗?一道容斥都要超时的题目,我都要为我自己点根香了,拿着gcd一顿乱搞,果然搞出了个0分.不得不承认博主的数学真的太渣了,但这道题的解题思路真的太妙了(因为渣所以必须学习!). 首先,一个必须要知道的东西,操场是环形的(即 \((mod\) \(n)\) 意义下的).若第\(k\)个格子可以被第\(i\)个同学踩到,那么必定存在一个\(x\) 使\(x*a_i…
題意: 現有一平面直角坐標系,有n個點,每一個點必須向某一個方向發射射線,且任意一條射線必須與某一條坐標軸平行.定義一種發射射線的方案是合法的,則方案必須滿足: 1.沒有一條射線交叉 2.沒有一條射線經過n個點中,除發射點以外的任意一點 問有多少種發射方案 待填…
题目链接 我们可以把棱柱拆成有\(n\)条高的矩形,尝试递推. 在计算的过程中,第\(i\)列(\(i\neq n\))只与\(i-1\)列有关,称\(i-1\)列的上面/下面为左上/左下,第\(i\)列的上面/下面为右上/右下. 我们可以发现,右上可选的颜色数与左上和右下是否同色有关,右下同理,那就记\(f[i][0/1][0/1]\)表示左上与右下是否同色,左下与右上是否同色. 但是第\(n\)列和第\(1\)列不能同色,最后怎么算答案? 不知道第\(n\)列状态算不了,所以我们还要记第\(…
题目链接 容易想到容斥,但是很恶心,因为要对行和列都容斥,然后行+列又要容斥.. 于是得到\(O(nm\log)\)的做法. 就有70分了: #include <cstdio> #include <algorithm> #define mod (1000000007) #define Mod(x) (x>mod&&(x-=mod))//>= #define ID(x,y) ((x-1)*m+y) typedef long long LL; const i…
题意 $n * m$的网格,对其进行黑白染色,问每一行每一列至少有一个黑格子的方案数. Sol 考场上只会$n^3$的dp,还和指数级枚举一个分qwq 设$f[i][j]$表示到了第$i$行,已经有$j$列被染黑,然后暴力转移上一行有几个黑格子 正解是容斥 首先固定好列,也就是保证每一列都有一个黑格子 这样的方案是$(2^N - 1) ^M$ 然后容斥行 组合数暴力算即可 #include<cstdio> #include<cstring> #include<algorith…
坑爹的第一题,我居然想了足足3个小时,而且还不确定是否正确. 于是,我就在这种情况下心惊胆跳的打了,好在ac了,否则就爆零了. 第二题,树形dp,本来差点就想到了正解,结果时间不够,没打完. 第三题,比赛上直接弃疗. 感想 首先强烈谴责出题人,输入开了10^6,我打了读入优化还调了半天才过,什么坑爹的题啊! 本来第一题是个水题,但是我却想了那么久,可能是因为我的基础打得不够扎实,基础训练不够,光顾着学习更高深的算法却忽略的基础的知识.…
题目 分析 首先,设\(f_{i,j}\)表示最大的以(i,j)为左下角的正方形的边长. 转移显然,\(f_{i,j}=\max(f_{i-1,j},f_{i,j-1},f_{i-1,j-1})+1\) 接着,再设\(g_{i,j,k,l}\)表示在以\((k,l)\)为左上角,\((k+2^i-1,l+2^j-1)\)为右下角的矩阵中,最大的f. 二维rmq就不讲了. 假设询问矩阵(x,y,x1,y1), 二分答案ans(想想为什么?) 用rmq看红色区域中的最大f值是否合法. 注意:出题人将…
题目 题目 20%算法 设\(f_{i,j}\)表示第i个节点选了j这个权值的方案数. 显然转移方程为,\[f_{i,j}=\Pi_{v=son(i)}(\sum_{k=1}^{j-k}f_{v,k}+\sum_{k=j+k}^{m}f_{v,k})\] 40%算法 接着上面的想法, 观察转移方程,发现,求和部分其实是两段连续的,那么将\(f_{i}\)求一个前缀和. 100%算法 观察\(f\)数组,发现其实\(f\)是对称的,而且中间的一段是相同的,设深度为x,那么前面就有\((x-1)k\…
题目 分析 发现,当子段[l,r]被取了出来,那么[l-1,r].[l,r+1]一定也被取了出来. 那么,首先将[1,n]放入大顶堆,每次将堆顶的子段[l,r]取出来,因为它是堆顶,所以一定是最大的子段,输出它,并将[l+1,r]和[l,r-1]放进堆中. 一共就只用做k次就可以了. #include <cmath> #include <iostream> #include <cstdio> #include <cstdlib> #include <c…
第一题,本来一开始就想到了数位dp,结果脑残地打了十几个转移方程,总是调试不出来,一气之下放弃了. 调第一题几乎调了整节比赛,第二第三都没它. 第二题连边找联通块. 第三题题解都打了三页,看都不想看. 总结 1.要坚持不懈,不能放弃.…
题目 给一棵n 个结点的有根树,结点由1 到n 标号,根结点的标号为1.每个结点上有一个物品,第i 个结点上的物品价值为vi. 你需要从所有结点中选出若干个结点,使得对于任意一个被选中的结点,其到根的路径上所有的点都被选中,并且选中结点的个数不能超过给定的上限lim.在此前提下,你需要最大化选中结点上物品的价值之和. 求这个最大的价值之和. 分析 设\(f_{i,j}\)表示在以i为根的子树中,选了j个节点(当j>0时,i节点必选). 转移就显然了,对于每个节点,与它的每个儿子分别做背包, 有个…
题目 小胡同学是个热爱运动的好孩子. 每天晚上,小胡都会去操场上跑步,学校的操场可以看成一个由n个格子排成的一个环形,格子按照顺时针顺序从0 到n- 1 标号. 小胡观察到有m 个同学在跑步,最开始每个同学都在起点(即0 号格子),每个同学都有个步长ai,每跑一步,每个同学都会往顺时针方向前进ai 个格子.由于跑道是环形的,如果一个同学站在n-1 这个格子上,如果他前进一个格子,他就会来到0. 他们就这样在跑道上上不知疲倦地跑呀跑呀.小胡同学惊奇地发现,似乎有些格子永远不会被同学跑到,他想知道这…
题目 给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位. 由于答案可能很大,模10^9 + 7 输出. 分析 我们从小到大枚举i, 假设1~i-1位都是等于T的1~i-1位,那么第i位就要小于T[i], 然后在保证不用的个数等于k的情况下,i+1~n位就可以随便选. 细节很多,小心处理. #include <cmath> #include <iostream> #incl…
第一题用组合数各种乱搞,其恶心程度不一般.搞了很久才调对,比赛上出了一点bug,只拿了30分. 第二题我乱搞得出个错误的结论,本来自信满满60分,结果爆零了. 第三题,树形dp,在一开始的时候想到了,不过为了调对第一题,没有打出来. 感想 大翻车!只拿了30分,被虐的好惨. 我要再接再厉,战胜自我!…
第一题二分,在比赛上明明想到的方法,结果考虑的时候似乎漏了什么,被否决掉了. 只打了个水法,10分. 第二题,最长不上升子序列,原题,类似的题目做过两道,直接搞定. 第三题,一开始想了一种通过在树上打标记,记录剩下空房间的个数来处理, 结果细节太多了,放弃了.打了个暴力,有神奇的错了. 正解是通过每个点的优先值来维护一个堆. 总结 1.考虑方法要考虑全面,发现错误不能直接否决掉这个想法,要考虑清楚.…
题目 分析 首先预处理出每个点的优先级,当有一个人进入时,一定会走到优先级最大的空房间中. 把所有空的房间扔到一个堆中,按优先级大小维护这个堆. 答案怎么求就不说了,很容易想到,就只讲操作吧. 对于第一种操作,我们就将一个一个扔进优先级最大的房间(即堆顶),因为堆顶的房间有人,所以将堆顶的房间踢出堆. 对于第二种操作,当一个房间空了,一定是从它的父亲房间补上来. 倍增将深度最大的空了的房间的祖宗取出来,因为它的祖宗们一定一个接一个往下走一个位置. 也就是说,深度最大的空了的房间的祖宗人的人会走掉…
题目 分析 我们考虑,当现在有一个合法的集合时,如何往里面增加一个点,使这个集合仍然合法. 假设现在有一个合法的集合, 那么当我们加入一个点,它的道路穿过来整个集合,那么 然后搞一遍最长下降子序列就可以了. #include <cmath> #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> const int maxlongint=2147483…
题目 分析 我们二分答案 设\(sum_{i,j}\)表示的i列前个数的和, 假设当前出的二分答案为x,第i列挖了\(h_j\)层,则 \[\dfrac{\sum_{i=1}^{n}sum_{i,h_i}}{\sum_{i=1}^{n}h_i}>=x\] 转移得\(\sum_{i=1}^{n}sum_{i,h_i}-\sum_{i=1}^{n}h_ix>=0\). 那么对于每一列,把最大的\(sum_{i,h}-hx\)求出了,加在一起就可以了. #include <cmath>…
分析 如果打爆搜的话可以拿60分. 首先知道期望是可以累加的,即i通过j去到k的期望,等于i去到j的期望加j去到k的期望. 所以令d[i]表示i的出度,F[i]表示从i到i的父亲的期望,G[i]表示i的父亲到i的期望,j表示i其中任意一个儿子,k表示i的父亲,l表示k其中任意一个儿子,e表示k的父亲. 很容易推出: \[F[i]=\dfrac{1}{d[i]}+\dfrac{1}{d[i]}\sum(1+F[j]+F[i])\] \[G[i]=\dfrac{1}{d[k]}+\dfrac{1}{…
分析 这道题看上去很恶心,实际上只用记录四坨东西就能打DP了:y坐标最小的向上射的点.y坐标最大的向下射的点.y坐标最大和最小的向右射的点,转移显然.注意,如果该状态的值为零就可以略过,否则会超时. #include <cmath> #include <cstdio> #include <cstdlib> #include <iostream> #include <algorithm> #include <cstring> using…
题目描述 输入 输出 样例输入 3 2 2 0 1 2 3 3 2 1 3 1 2 3 3 1 1 2 2 3 样例输出 4 2 12 数据范围 样例解释 解法 设f[i][j]为在第i个点填了j的合法方案. 则f[i][j]=∏(f[son(i)][l])(l∈[1,j−k]∪[j+k,m]). 时间复杂度为O(nm). 观察到f值呈对称状,且中间一段的值是相同的. 利用这个性质优化动态规划. 代码 #include<iostream> #include<stdio.h> #in…
题目描述 输入 输出 样例输入 3 4 1 3 4 样例输出 8 7 4 4 数据范围 样例解释 解法 二分做法 考虑到可以二分第k大的值mid,如果比mid大的区间和数小于或等于mid,那么mid就合法. 找一个合法的最小mid就是我们要找的mid. 询问有多少个区间大于或等于mid可以使用dfs,从[1,n]开始: 设当前dfs到[l,r],如果当前区间合法,就可以推到[l,r-1]和[l+1,r]. 否则直接退出. 时间复杂度为O(log(maxa)∗k). 堆做法 先把所有[1,i]加入…
题目描述 给一棵n 个结点的有根树,结点由1 到n 标号,根结点的标号为1.每个结点上有一个物品,第i 个结点上的物品价值为vi. 你需要从所有结点中选出若干个结点,使得对于任意一个被选中的结点,其到根的路径上所有的点都被选中,并且选中结点的个数不能超过给定的上限lim.在此前提下,你需要最大化选中结点上物品的价值之和. 求这个最大的价值之和. 输入 第一行为两个整数n; lim 接下来n 行,第i 行包含一个整数vi,表示结点i 上物品的价值. 接下来n- 1 行,每行包含两个整数u; v,…
题目描述 小胡同学是个热爱运动的好孩子. 每天晚上,小胡都会去操场上跑步,学校的操场可以看成一个由n 个格子排成的一个环形,格子按照顺时针顺序从0 到n-1 标号. 小胡观察到有m 个同学在跑步,最开始每个同学都在起点(即0 号格子),每个同学都有个步长ai,每跑一步,每个同学都会往顺时针方向前进ai 个格子.由于跑道是环形的,如果 一个同学站在n-1 这个格子上,如果他前进一个格子,他就会来到0. 他们就这样在跑道上上不知疲倦地跑呀跑呀.小胡同学惊奇地发现,似乎有些格子永远不会被同学跑到,他想…
题目描述 给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位. 由于答案可能很大,模10^9 + 7 输出. 输入 第一行为两个整数n; k 第二行一个字符串S 第三行一个字符串T,(T即是k位与S不同的串) 输出 输出一行取模后的答案. 样例输入 4 1 abcd bbcd 样例输出 76 数据范围 对于前30% 的数据,n<=5 对于100% 的数据,k<=n<=10^5 解…
题目描述 输入 输出 样例输入 5 4 1 2 1 3 3 4 3 5 1 4 2 4 1 2 2 5 样例输出 3 1 1 2 数据范围 样例解释 解法 可推知原树可以转换为一个序列,即优先序列: 一个01序列,当要往其中加入元素时,给第一个0加1即可. 操作1 等价于所谓优先序列加入元素. 实现: 二分第一个0的位置index: 使用数据结构得出[1,index]的和sum,如果index−sum>0,则index合法. 操作2 利用倍增得出最近的连续的有值祖先v,给v-1即可. 时间复杂度…
题目描述 输入 输出 样例输入 5 1 4 5 2 3 3 4 2 1 5 样例输出 3 数据范围 样例解释 解法 模型显然. 设第一列为a[],第二列为b[],f[i]为前i个数的最大答案. 顺序枚举a,则f[i]=max(f[k]+1)(b[k]<b[i]). 最长不下降子序列. 代码 #include<iostream> #include<stdio.h> #include<math.h> #include<string.h> #include&…