09 2022 档案
摘要:串折叠 Folding 题面翻译 题目描述 折叠由大写字母组成的长度为 ( )的一个字符串,使得其成为一个尽量短的字符串,例如 AAAAAA 变成 6(A)。 这个折叠是可以嵌套的,例如 NEEEEERYESYESYESNEEEEERYESYE
阅读全文
摘要:D. Reset K Edges 显然对于每个k每个答案具有单调性 我们考虑二分一个能保留的最大长度 x 然后我们自上至下 肯定不好操作 我们考虑自下而上 对于每次到达了我们最大长度x 我们再断开是最优的 可以感性理解一下 因为我们越往上走 包括的节点就越多 而对于每个节点 被直接接到根节点肯定是更
阅读全文
摘要:[IOI1998]Polygon 题面翻译 题目可能有些许修改,但大意一致 多边形是一个玩家在一个有n个顶点的多边形上的游戏,如图所示,其中n=4。每个顶点用整数标记,每个边用符号+(加)或符号*(乘积)标记。 第一步,删除其中一条边。随后每一步: 选择一条边连接的两个顶点V1和V2,用边上的运算符
阅读全文
摘要:[USACO16OPEN]262144 P 题目描述 Bessie likes downloading games to play on her cell phone, even though she doesfind the small touch screen rather cumbersome
阅读全文
摘要:[USACO13NOV]No Change G 题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K coins (1 <= K <= 16), each with va
阅读全文
摘要:经营与开发 题目描述 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词。 eXplore(探索) eXpand(拓张与发展) eXploit(经营与开发) eXterminate(征服) ——维基百科 今次我们着重考虑exploit部分,并将其
阅读全文
摘要:[ZJOI2004]午餐 题目描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂。这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭。由于每个人的口味(以及胃口)不同,所以他们要吃的菜各有不同,打饭所要花费的时间是因人而异的。另外每个人吃饭的速度也不尽相同,所
阅读全文
摘要:山区建小学 题目描述 政府在某山区修建了一条道路,恰好穿越总共 个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为 (为正整数),其中, 。为了提高山区的文化素质,政府又决定从 个村中选择 个村建小学。请根据给定的
阅读全文
摘要:[NOIP2003 普及组] 数字游戏 题目描述 丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共 个),你要按顺序将其分为 个部分,各部分内的数字相加,相加所得的
阅读全文
摘要:[NOIP2005 提高组] 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点: (其中 是桥
阅读全文
摘要:B Non-decreasing Array 我们可以知道两个操作都是一样的 那我们直接记dp[i][j]为前i个数选了j个数 并且以ai为结尾的max 状态转移直接枚举 dp[k][j-1]+(a[i]-a[k])^2 即可 ai范围有负数 所以我们初始化dp数组为负无穷 dp[1][1]为0即可
阅读全文
摘要:[HNOI2002]公交车路线 题目描述 在长沙城新建的环城公路上一共有 个公交站,分别为 A、B、C、D、E、F、G、H。公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另外一个公交站往往要换几次车,例如从公交站 A 到公交站 D,你就至少需要换 次车。 Tiger
阅读全文
摘要:子序列 题目描述 给定一个长度为 ( 为偶数)的序列,问能否将其划分为两个长度为 的严格递增子序列。 输入格式 若干行,每行表示一组数据。 对于每组数据,首先输入一个整数 ,表示序列的长度。之后 个整数表示这个序列。 输出格式 输出行数与输入行数相同。 对于
阅读全文
摘要:E. Rectangular Congruence 我们考虑对 ar1,c1+ar2,c2 ≢ ar1,c2+ar2,c1(modn) (同余情况下 不同也是可以同时加任意数的 可以感性理解一下) ar1,c1 - ar1,c2 ≢ ar2,c1 - ar2,c2(modn) 这个的意思就是我们
阅读全文
摘要:D. New Year Concert 显然我们外层应该套一个线性dp f[i]表示 前i个我们必须改几个的min 我们考虑转移:我们需要找到当前b[i]和其前面某一个组成一个区间不合法的 我们考虑越往前看 gcd减小 而 我们r-l+1区间长度增加 证明我们只有一个交点: 这样我们的转移就只有一个
阅读全文
摘要:D. K-good 我们考虑变式 我们设我们有一个k (n-(k+1)*k/2)%k=0 n=(k+1)k/2+kp 2n=k(k+1+2p) 因为我们等式右边 k 和 k+1+2p 奇偶性不同 我们要求的就是k 而对于我们已知的就只有n 我们考虑对n因式分解 分成ab a表示2的幂 b就表示成一个
阅读全文
摘要:E. Replace the Numbers 开始想到了一个二分的做法 好像是O(nlog)的 后来才想了一下可以在两个数组之间反复横跳 那我是不是像记忆化搜索一样 记录一个路径即可 我们记录f[i]表示的就是当前i点的颜色为什么 显然我们正着做需要知道后面的状况 那我们就可以离线下来倒着做 #in
阅读全文
摘要:D2. Zero-One (Hard Version) 我们由D1可知当我们的y小于x/2时 我们可以用2y来减小相邻的cost 那我们考虑要是y比较大的时候 我们也可以用多个x来减小cost 我们可以轻松的写出get函数 int get(int l,int r) { if (l + 1 == r)
阅读全文
摘要:D. Edge Split n+2条边 并且连通图 就证明最多多3条边 我们可以想到的是要是连成了环的话 不如拆一条边给其他颜色 所以我们一定要无环 我们先跑一遍最小生成树确定成红色 要是m=n+2 才有可能多三条构成环 那我们考虑将他其中一条边变红 这样红色必然会出现环 我们考虑将刚刚变红的一个端
阅读全文
摘要:A - Anyway Takahashi 这里我还是关了ll的 C开了忘了关 害的F多了一发罚时 #include <bits/stdc++.h> using namespace std; const int N = 3e5+10; const int M = 998244353; const in
阅读全文
摘要:E - Many Operations 我们发现这个的位运算的顺序是不可以改变的 那我们就不能把后面的结果先算出来做 那怎么办呢 我们考虑数据范围给的是2的30次方 我们考虑拆位 我们可以发现 位数上仅有0/1 两种状态 30位 N是2e5 好像可以dp 我们就由此设置dp[i][j][k]为当前第
阅读全文
摘要:F - Sorting Color Balls 我们不难发现排序的花费一定是逆序对的数量 并且 颜色相同的逆序对也不会耗费 那我们求一次总的逆序对 再颜色相同都求一次逆序对即可 但是注意每次求完都要清空 我们可以直接add(x,-1)即可 #include <bits/stdc++.h> using
阅读全文
摘要:D - Unique Username 显然搜索 我们枚举全排列的同时枚举额外'_'的个数 但是注意的是我们要恢复现场 但是s显然不能-= 那我们用一个tmp变量即可 #include <bits/stdc++.h> using namespace std; const int N = 2e5+10
阅读全文
摘要:D - I Hate Non-integer Number 我们思考这个问题可以转化为我在N个数里面拿x个数 然后sum可以整除x 这像一个什么? 没错就是背包 然后显然ai的数量太大了 我们可以用%x的余数来将一维变成N 看起来是个n3的dp (本来背包就是两维)dp[i][j][k]表示前i个数
阅读全文
摘要:E - Blackout 2 经典删边反着做 变成加边 然后题干提到连通块 我们会很自然的想到并查集 但是多源点 那我们也可以想到一个虚拟超级源点 最后要注意的就是并查集 find 顺序即可 一般我们先加cnt再merge 当然要注意的是我们merge时 一定是合并到超级源点上 就是要指向0 #in
阅读全文
摘要:E - Red and Blue Graph 看题发现有偶数条边连的是不同点 那我们从度数开始考虑 这样红色点的度数就一定有k 红色点和红色点之间的度数是相互的所以也是偶数 那我们红色点的总度数也是偶数 问题就转化成了我们从度数类选k个点 总度数是偶数 用组合数求解即可 #include <bits
阅读全文
摘要:D. Madoka and the Best School in Russia 我们可以知道x是又其众多因子构成的 所以我们可以先暴力枚举他的因子取出来即可 题解说的不会超过700个 很神秘 然后就是一个因子选和不选 选几次 是不是很像一个背包问题 那我们就可以用dp来解决(先枚举每一个点 在枚举每
阅读全文
摘要:D. Lost Arithmetic Progression 阅读完样例我们就应该清楚我们C一定被B包含 这个你可以找一些性质 或者直接用map啥的判即可 否则我们输出0 然后我们的C一定要在B“中” 也就是C不能在B的边界 这个看完样例就能反应出来 最后我们考虑有多少个答案 我们直接枚举dc的因数
阅读全文
摘要:D. Reverse Sort Sum 我们首先能反应出来的是可以倒着看 并且第一个样例来看好像最后一定是1 这是因为我们最后一个样例的下标和自身的数已经相等了那么我们可以等到一定是1 要是他是1的话 我们考虑可不可以把他砍掉 我们砍掉的话 是砍掉最后一步最后一步的数肯定就是最后那几位减一 还有我们
阅读全文
摘要:E. Moving Chips 首先我们可以发现好像有很多最终位置都能满足最后答案最小的条件 我们再观察可以发现好像两个格子之间的最短曼哈顿距离都是满足这个条件的 那我们自然把最后一列的那个*设为终点最好考虑(后面的直接砍掉即可 然后我们思考如何求这些距离 我们发现只有两行 可以把他拆成4个状态 然
阅读全文
摘要:D. Lena and Matrix 首先我们能想到的就是暴力枚举 但是肯定是不行的 我们可以减少枚举个数 那么哪些是可以砍掉的呢 首先在黑色圈内的黑色块 肯定是可以被砍掉的 我们考虑外圈的 好像还是很多 那我们考虑四个角的 我们可以考虑到切比雪夫距离好像维护的就是四个角(左上左下右上右下) 原式就
阅读全文
摘要:D. Madoka and The Corruption Scheme 思考样例n=3 k=2 我们发现好像怎么都有一个点触及不到 我们把k变成1 发现好像有4个点触及不到 k==0 7个点触及不到 1 3 3 1 我们可以发现这恰好是组合数 而且组合数 Cn^i = 2^n
阅读全文
摘要:D. Integral Array 正向不好做 我们考虑反着做 我们知道一个数x下取整 要是有k和x两个数的话[kx,kx+x-1] 我们能考虑到这样区间赋值 利用线段树可以做到O(clogc) 还有O(clogc)的做法就是暴力的来对于每一个x都遍历一遍其倍数 要是其倍数有值 那么我们必须拥有其倍
阅读全文
摘要:D. Max GEQ Sum 我们考虑暴力枚举a[i]为最大值 通过单调栈可以求出a[i]左边右边第一个大于a[i]的 然后通过ST表查询前缀和数组(i,R[i]-1)的最大值 (L[i]+1,i)的最小值得到我们需要的区间和最大值 check即可 注意我们这里因为是前缀和 query_max(i,
阅读全文
摘要:D. Integers Have Friends 同余问题显然不好考虑其%数是啥 我们考虑不考虑其模数转化一下 我们知道同余既然余数相同 显然可以构造差值序列(和差分不同 这个没有首项 因为我们这个差值就相当于是i和i+1连接的纽带 要是这个差值满足的话i和i+1都会满足)消除余数都为0 然后都是整
阅读全文
摘要:D. Maximum AND 可以很轻松通过^和& 两个操作看出 我们要求的两个序列每一位上的1加起来必须等于n才行 多一个少一个都不行 然后1加起来等于n 0自然加起来也等于n 0和1的数量相等 但是直接每一位算肯定是不对的 因为会有有些组不同 比如样例1 我们考虑按位贪心 让后面的组要是和前面组
阅读全文
摘要:E. Spanning Tree Queries 纯暴力做法t了 我们考虑如何优化 我们可以发现要是所有绝对值曲线单调性不变 我们MST的答案是可以O(1)转移的 res+=(x-prex)*(num1-num2) 单调性改变的点 会有e1,e2交点 e1与x轴交点 再对每一个交点跑一边Krusca
阅读全文
摘要:E. Colorful Operations 对于一个序列 有三种操作: 1.将[l,r]区间颜色修改为c 2.将所有c颜色的+x 3.单点查询 操作1好说是个区间修改 操作2就有点逆天了 那我们考虑简化操作2 我们可以列一个数组color 每次操作2 就相当于color[c]+=x; 那么我们操作
阅读全文
摘要:D. Cross Coloring 很容易想到的就是分成几个块 有几个就是k多少次幂 但是显然暴力的做法是n2的 我们考虑如何优化 我们考虑对每一行 这个x[i]能成立的条件是啥 那就是y[i]里有比他更小的即可 对于列也是如此 最后要注意的就是要特判0的情况 #include <bits/stdc
阅读全文
摘要:E. Expand the Path 我们画出一个合法的一般性的来研究 比如RDRDR 我们可以将其任意一个往下 往右延长 但是这个图形获得的面积是不规则的 但是我们知道 合法的序列肯定是只能往下往右的 我们的线移动的距离一定 那么获得的面积也肯定是个矩形 从而移动一下即可 我们只需要记录拐角点在哪
阅读全文
摘要:Anonymity Is Important 我们最开始会想到用三个状态表示 其实并不用我们只需要用 0表示这个人没病 1表示不确定有病(这样我们就可以用set来做了) 要是一个区间给了有病 我们只有把其他的所有人都排除成没病才行 比如我们 110000010000111 这个中间的1不一定是一定有
阅读全文