LibreOJ NOI Round #2 Day 1】的更多相关文章

「LibreOJ NOI Round #2」不等关系 解题思路 令 \(F(k)\) 为恰好有 \(k\) 个大于号不满足的答案,\(G(k)\) 表示钦点了 \(k\) 个大于号不满足,剩下随便填的方案数. 枚举有多少个大于号被钦点了,\(F(0)=\sum_{i=0}^n G(i)(-1)^i\) . 对于一个只有小于号限制的序列的方案数就是每一个小于号链接的联通块里分配的数字顺序固定,块与块之间随便排,令 \(sz[i]\) 表示第 \(i\) 个联通块的大小,方案数也就是 $ \dfra…
二次联通门 : LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 /* LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 dp 记录一下前驱就好了 再随便用前缀和优化一下 O(N) */ #include <iostream> #include <cstdio> ; char Buf[BUF], *buf = Buf; inline long long max (long long a, long long b) { re…
LibreOJ NOI Round #2 Day 1 T1: 别被定义弄晕了 反着做,A->1/A+B 取倒数没法做,所以变成a/b,维护2*2的矩阵 区间?不用线段树,不用倍增 存在逆矩阵,直接前缀积 注意左乘右乘方向 T2 模拟费用流 经典老鼠和洞的问题 序列:从左往右扫, 到了老鼠i,wi加入堆, 到了洞j,找权值最大的未匹配老鼠或者已经匹配的洞k,如果valk+vj>0,更新ans,pop,然后把-vj加入堆 外向树:可并堆进行上述操作 而本题带修 (52)60pts做法: https…
瞬间移动 官方题解 题意:一个带边权无向图,加边以及询问在 x,x+b,...,x+(c−1)bx,x+b,...,x+(c-1)bx,x+b,...,x+(c−1)b 这些数中,有多少存在一条与之模 m 同余的从 u 到 v 的路径(可以不是简单路径). 考场上读错题系列,以为边是有向的,然后就完全不可做了对不对…… 由于是无向边,而且路径可以不是简单路径,那就意味着我们可以在联通块内随便绕圈.那就变成了一个数是否能在模m意义下被各圈大小线性表出的问题,加上这些数是用等差数列的形式给出,也就是…
麻烦的动态DP写了2天 简化题意:给树,求比给定独立集字典序大k的独立集是哪一个 主要思路: k排名都是类似二分的按位确定过程. 字典序比较本质是LCP下一位,故枚举LCP,看多出来了多少个独立集,然后判断:枚举完LCP,再往回做过去. 外面: 假如是一串0101010表示每个点有没有在独立集里,然后比较这个01串的字典序? 枚举LCP,LCP下一位:原来是0,这次就是1:原来是1,这次必须还是1.后面的随便选择.找方案数 但是这里是一般的字典序,两个1中间的0都会省略,使得大小比较没有那么容易…
下面给出部分分做法和满分做法 有一些奇妙的方法可以拿到同样多的分数,本蒟蒻只能介绍几种常见的做法 如果您想拿18分左右,需要了解:质因数分解 如果您想拿30分左右,需要了解:一种较快的筛法 如果您想拿70分左右,需要了解:莫比乌斯反演+杜教筛+整除分块+容斥 如果您想拿100分,需要了解:线性筛+杜教筛+莫比乌斯函数+狄利克雷卷积+推式子+微积分+整除分块 这时候如果您还想做这道题的话... 18分做法 首先N=1 时,就是求不超过 M的完全平方数有多少个,直接输出\(\lfloor \sqrt…
题目: 题解: 几何部分,先证明一下 \(KX = \sqrt{a},YL = \sqrt{b}\) 设左侧的圆心为 \(O\) ,连接 \(OK\) ,我们有 \(OK = r\). 然后有 \(r = \frac{a+1}{2},OX = r - a\) 勾股定理有 : \(KX^2 = OK^2 + OX^2\) 解得 : \(KX = \sqrt{a}\). 同理 : \(YL = \sqrt{b}\). 然后我们将 \(YL\) 向左平移直到 \(b\) 与 \(X\) 重合,设此时点…
题目: 题解: 我们考虑把每对花色相同的牌看作区间. 那么如果我们设 \(f_i\) 表示决策在 \([1,i]\) 内的最优答案. 那么有 \(f_i = max\{max\{(f_{j-1}+\sum_{k=j}^iv_k) | a_{j-1} = a_i\},f_{i-1}\}\) 我们可以记录每个点上一次出现的位置 \(la_i\). 那么每次我们更新的时候用 \(la\) 跳转即可. 然后我们发现每个数只能用和它相同的数的位置转移过来. 所以实际上这分成了若干的转移线. 然后我们发现在…
题面 传送门 题解 感谢\(@M\_sea\)的代码我总算看懂题解了-- 这个操作的本质就是每次把\(x\)的\(k\)进制最低位乘\(2\)并进位,根据基本同余芝士如果\(k\)是奇数那么最低位永远不会变为\(0\),也就是说最低位所在的位置是不变的,并且\(1\)到\(n\)会被分成若干条链,链上我们可以用线段树之类的搞一搞 然而如果\(k\)不是奇数的话事情就会变得比较辣手了--不过我们可以发现对于所有满足\(x=a\times 2^s\)的数,如果\(k=b\times 2^t\)且\(…
题目传送门:LOJ #510. 题意简述: 给出一个在 \(K\) 进制下的树状数组,但是它的实现有问题. 形式化地说,令 \(\mathrm{lowbit}(x)\) 为在 \(K\) 进制下的 \(x\) 的最低非零位的值,例如 \(\mathrm{lowbit} \!\left( 230_{(5)} \right)\! = 30_{(5)}\). 则 add(x, v) 操作执行的是: 当 \(x \le n\) 时,执行 s[x] ^= v,并将 \(x\) 变为 \(x + \math…
我这道题写了整!整!三!天! 我要一定要写这篇博客来表达我复!杂!的!心!情! 题目 LOJ511 官方题解(这个题解似乎不是很详细,我膜 std 才看懂的) 调这道题验证了我校某人的一句话:调题是一个熵减的过程,和 std 越来越像. 分析 由于我写了三天,我也想让你们跟我一样自行去看 std 然后写三天,所以我决定不写这题的题解. 我的思路和题解不完全一样.然而由于上述原因,我最终越写越像 std . 为了方便叙述,假设我们已经在意大利面的帮助下知道了如何在规定某些点必须选,某些点不能选,某…
嘟嘟嘟 这题没卡带一个\(log\)的,那么就很水了. 然后我因为好长时间没写矩阵优化dp,就只敲了一个暴力分--看来复习还是很关键的啊. 这个函数显然是从后往前递推的,那么令第\(i\)位的分子分母为\(x', y'\),第\(i + 1\)的为\(x, y\),因为\(f(i) = a_i + \frac{1}{f(i + 1)} = \frac{a_i * f(i + 1) + 1}{f(i + 1)}\),所以\(x' = a_i * x + y, y' = x\). 这样我们把\(x,…
LOJ 思路 发现既有大于又有小于比较难办,使用容斥,把大于改成任意减去小于的. 于是最后的串就长成这样:<<?<?<??<<<?<.我们把一段连续的<称作一条链.如果枚举大于号变成什么,那么最后的答案很容易算,就是\(\frac {n!}{\prod len!}\). \(dp_i\)表示前\(i\)个位置分成若干条链,带上容斥系数的方案数. \(dp_i\)从\(dp_j\)转移,即\([j+1,i]\)这些位置用<连接,并且需要满足\(s_…
题目 先进行一个转化: 每次花费\(\gcd\limits_{i=l+1}^rB_i\)的代价,可以连\((l,r)\)这一条边. 然后我们需要求\(0\sim n\)的最小生成树. 根据Kruskal的思想,\((0,n)\)这条边一定会被选. 然后根据Prim的思想,对于某个点,我们需要找到其最短的出边. 而显然对于\(i\),它最短的出边为\((i,0)\)或者\((i,n)\).边权为\(L_i=\gcd\limits_{j=1}^iB_j\)和\(R_i=\gcd\limits_{j=…
题目 瞎猜一下我们只要\(n\)次询问就能确定出\(\{A_i\}\)来 感受一下大概是询问的区间越长代价就越小,比如询问\([l,n]\)或\([1,r]\)的代价肯定不会超过\([l,r]\) 所以大胆猜一下我们询问的只有一些前缀和后缀 首先我们肯定要询问一下\([1,n]\)的和,之后我们考虑顺次得到\(A_1\)到\(A_n\)的和 想得到\(A_1\),我们当然可以直接询问\([1,1]\),但是有\([1,n]\)的和我们询问\([2,n]\)的和也能得到\(A_1\) 同理我们想得…
题意 一个带边权无向图,有两种操作:加边以及询问在\(x,x+b,...,x+(c-1)b\)这些数中,有多少个数存在至少一条与之模\(m\)同余的从\(u\)到\(v\)的路径(可以不是简单路径). 做法 奇数 考虑某一边\((u,v,w)\in E\),从\(u\)到\(v\),通过来回绕圈的方式,能形成\(2k+1\)的关于\(w\)系数,将其放在模意义考虑,通过调整\(m\)的系数,能产生\(w\)的任意整数系数: 故能贡献\((w,m)\)任意倍系数: 整个\(E\)能构成的贡献就为\…
「LibreOJ NOIP Round #1」旅游路线 题目链接:https://loj.ac/problem/539 题解: 这个题就很神奇 首先大力$dp$很好想,因为可以把一维放到状态里以取消后效性. 然后就能倍增了...因为就是个智障$dp$ 我没想出来/px 代码: #include <bits/stdc++.h> #define N 110 #define M 1010 #define K 30 #define inf 0x3f3f3f3f using namespace std;…
[题意]LibreOJ [算法]乱搞 [题解]容易发现数列最后一定单调,最后单调递增则最大值赋为最后一个,反之最小值赋为最后一个,然后处理一些细节就可以AC,要注意以下几点: 1.数列连续三项以及数列最后一项>10^7时退出. 2.可能第一要求项就比你枚举的大,需要特判. 3.要求项的枚举不能等于最大项,不然会无法正常指向最后一个. #include<cstdio> #include<cstring> #include<cctype> #include<cm…
Description T 城是一个旅游城市,具有 nnn 个景点和 mmm 条道路,所有景点编号为 1,2,...,n1,2,...,n1,2,...,n.每条道路连接这 nnn 个景区中的某两个景区,道路是单向通行的.每条道路都有一个长度. 为了方便旅游,每个景点都有一个加油站.第 iii 个景点的加油站的费用为 pip_ip​i​​,加油量为 cic_ic​i​​.若汽车在第 iii 个景点加油,则需要花费 pip_ip​i​​ 元钱,之后车的油量将被加至油量上限与 cic_ic​i​​…
哎一开始看错题了啊T T...最近状态一直不对...最近很多傻逼题都不会写了T T 考虑距离较大肯定不能塞进状态...钱数<=n^2能够承受, 油量再塞就不行了...显然可以预处理出点i到j走ci步的最长距离(一开始以为一条路耗油为路的长度T T), 这个是经典题, 倍增求就好了...然后就可以转移了呀T T 最后二分就好了呀T T... 我怎么这么菜啊, 还写了好久T T... 一开始还写成n^4logn TLE了半天没查到错 #include<iostream> #include&l…
被以前自己瞎YY的东西坑了T T...单调队列的确是可以维护这种操作的.... 显然这题可以转化成维护不在车上的东西的最小值, 支持插入和删去最早出现的值,然后就可以用单调队列了T T #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<algorithm> #define ll long long #define uint unsign…
Prelude 题目链接:萌萌哒传送门♪(^∇^*) Subtask 1 & 2 这是什么鬼题面... 首先要看出,这就是一个基环树博弈. 具体题意:给出一个基环内向树,一个棋子初始在\(1\)号节点,双方轮流操作,设棋子所在节点为\(u\),每次可以从所有指向\(u\)的节点中选择一个,把棋子移动过去,不能操作者输,问先手是否有必胜策略,或者是否平局. 但是,这个图是可以变的,每次询问,假如我选择环上的两个点\(u\)和\(v\),把\(u\)的出边指向\(v\),那么游戏的结果如何? 考虑如…
题目啰嗦:支持三个操作: 不可重复集合:1.加入一个数 2.删除一个数 3.恢复目前最早的一次删除的数 操作可能不合法,每次有效操作之后求集合的mex(最小没有出现过的数) 50组数据+1e6,必须O(N) 维护删除.恢复的数的操作可以队列维护. 数有没有在集合里可以全局bool数组记录 加入删除一个数,mex怎么维护? 考虑化简问题:只插入? 直接mex往上走到第一个没有出现的数即可.单增,O(N) 有删除? 如果删除小的一个数,mex要跳下来,然后再恢复这个删除的数,mex又得一步一步走上去…
[题意]给定正边权有向图,车油量上限C,每个点可以花费pi加油至min(C,ci),走一条边油-1,T次询问s点出发带钱q,旅行路程至少为d的最多剩余钱数. n<=100,m<=1000,C<=10^5,q<=n^2. [算法]动态规划 [题解]官方题解 虽然不是DAG,但是由于q很小的特点,将q加入状态就满足DP的无后效性了. 令f[i][q]表示当前在i点并在i点加油,加油前钱数为q的最大路程.(q<pi时,f[i][q]=0) 假设下一加油点为j,转移方程:f[i][q…
[题意]一开始车上有编号为0~a的红茶,过程中出现的红茶编号仅有[0,b),有三种操作: 1.买进编号未在车上出现过的红茶. 2.丢掉车上指定编号的红茶. 3.将最早丢出去的红茶捡回来. 每次操作后求编号最小的不在车上的红茶. [算法]单调队列 [题解]本题最重要的性质在于早丢早捡. 因此,当进行丢掉编号为x的红茶这一操作时,如果编号>x的红茶早丢,那么也一定早捡,所以这些红茶没有贡献. 所以用单调队列维护所有有效的红茶,那么捡回来的时候判断是否队头,每次答案就是min(队头,maxs+1),m…
n<=100,m<=1000的图,在此图上用油箱容量C<=1e5的车来旅行,旅行时,走一条边会耗一单伟油,在点i时,若油量<ci,则可以把油以pi的价格补到ci,pi<=n*n,ci<=1e5,现T<=1e5个询问:从Ai出发,带Yi<=n*n块钱走不少于Si<=1e9的路程,问最多剩多少钱. 方法一:其实就是问从某个点出发,走路程Si,问最少花费.F(i,j,k)--从i出发,剩下j的油,走路程k最小花费,决策一下在i要不要加油即可. 方法二:走路程…
有一辆车一开始装了编号0-a的奶茶,现有m次操作,每次操作Pi在[-1,b),若Pi为一个未出现过编号的奶茶,就把他买了并装上车:若Pi为一个在车上的奶茶,则把他丢下车:否则,此次操作为捡起最早丢下去的奶茶,若没有符合要求的奶茶则忽略此次操作.对每次操作需要在线询问:操作进行后,不在车上的奶茶的最小编号.m<=1e6,b<=2m,a<=m,数据组数T<=50. 方法一:nlogn暴力,什么树状数组优先队列尽管上.. 方法二:不在车上的最小编号,其实就是还没买的最小和丢下车的最小,还…
[题目链接] https://loj.ac/problem/539 [算法] 首先 , 我们用f[u][k]表示现在在景点u ,还有k元钱 , 最多能够走多少路 不难发现f[u][k] = max{ f[v][k - P[u]] + Dist(u,v,min(C,ci)) } ( dist(u,v,w)表示从u走到v , 最多经过w条路 , 最多能走多少路 ) 用倍增弗洛伊德求dist, 然后进行上述dp , 即可 时间复杂度 : O(N^4 + N^3logN + TlogQ) [代码] #i…
考试的时候是这么想的: 求出每一个点花掉 $i$ 的花费向其他点尽可能走的最长距离,然后二分这个花费,找到第一个大于 $d$ 的就输出$.$然而,我这个记忆化搜索 $TLE$ 的很惨$.$这里讲一下正解: 上面的大题思路是正确的,但是记忆化搜索太慢,考虑倍增 $floyd.$令 $f[i][j]$ 表示 $i$ 号点花费 $j$ 能走的最远距离$.$令 $go[i][j][k]$ 表示 $i$ 号点走到 $j$ 号点走 $k$ 步的最远距离(在 $i$ 号点加一次油)$.$如果能求出 $g[i]…
正解:数论 解题报告: 传送门$QwQ$! 不想做题,来水点儿简单点的$QwQ$. 一个显然的点在于可以直接对不同质因子分别算$n_{min}$最后取$max$. 这个正确性还是蛮显然的?因为只要有$n\geq n_{min}$就一定能整除这个质因子呗$QwQ$. 现在就只要分别求这个$n_{min}$了 考虑二分呗,然后$n!$中$x$的指数之和就是$\sum \frac{n}{x^i}$ $over$ 一个优化是从大到小枚举这个$pr$这样二分的次数少些计算就少些,不然会$T$,$QAQ$.…