- 博客(21)
- 收藏
- 关注
原创 CF1842D Tenzing and His Animal Friends(最短路+构造)
题目的限制条件比较绕,可以这样理解:对于u,v,w这个限制条件,在所有的聚会方案里面,u或v单独出现在某个聚会方案里的时间的总和不得超过w,假设n==2 然后只有一个限制(1,2,3)验证一下样例1的每个限制就明白了验证限制:对限制(1,3,2):10000:1∈S,3∉S → 计入x=1。10010:1∈S,3∉S → 计入x=1(累计x=2)。10100:1∈S,3∈S → 不计入。11110:1∈S,3∈S → 不计入。最终x=2≤2,满足限制。
2025-04-07 14:23:29
523
原创 CF1861C Queries for the Array
操作条件检查与栈操作(栈非空)0栈顶为1⇒ 改为0;栈顶为2⇒NO;其余情况跳过1栈中有0⇒NO;否则所有1变为2最后记得要特判s.size()<2的情况string str;cin >> str;int c = 0;s.push(1);c--;s.pop();continue;temp++;s.pop();return;return;c++;s.pop();s.push(0);cin.tie(0);int t = 1;
2025-04-02 18:57:18
340
原创 CF1872F Selling a Menagerie
的收益,并且这个操作不会影响其他点。之后,我们删除这个点的所有连边,并继续更新入度为0的点。:如果一个点的入度为0,可以直接删除它并卖掉,从而获得。最小的点留到最后,其他点都可以提前卖掉,从而获得。这样的单向边,我们可以直接应用拓扑排序来解题。:执行一遍拓扑排序后,剩下的点必定属于环内的点。:对于一个环中的点,我们的最优策略是将。
2025-04-01 19:58:16
263
原创 蓝桥杯 2024 省 B 宝石组合
对每个数因数分解,标记出现过的因数,假如有某个因数出现的次数大于等于3,说明一定可以选到三个数使得gcd(a,b,c)等于这个数,我们从大到小遍历标记过的因数就能得到最大的gcd(a,b,c),记这个数为x。题目转化为给定n个数,求使得gcd(a,b,c)最大的三个数a,b,c(要求以字典序最小输出a,b,c)大概可以猜到这个公式化简后应该是gcd(a,b,c),打表看了一下没问题(最后对原数组进行排序,从小遍历输出是x因数的三个数。
2025-04-01 16:04:08
253
原创 Codeforces Round 897 D. Cyclic Operations
由经典结论可知对于图内的每个连通体至少有一个环,玩一下样例就可以知道如果要满足题意这个环的长度必须等于k。可以考虑建图,对i连ai,我们做一次操作相当于选图内一个长度为k的路径,前k-1个点能够变为目标数字。例如n==5 a={2,3,4,5,3}可以发现只有k==3时才能满足题意。
2025-04-01 11:48:48
199
原创 [ICPC 2024 Xi‘an I] Rubbish Sorting
对于操作2,我们可以从按字符串长度大到小枚举相似度(也就是所有状态中1的个数,这里需要根据状态中1的个数存入领接表),从枚举中的相似度中寻找最小的类型,比如我们需要查找ebc,枚举到相似度为2的时候到状态为011的情况时,我们只需要查找。对于1操作,假设需要存入的字符串为abcde,对于第i个字符选或不选总共有1<<5种状态,对于每种状态我们把他转为27进制的数字,然后用unordered_map mp存当前数字对应的最小类型。对于每个类型为 2 的操作,s 可能并没有出现在之前的 1 操作中。
2025-03-29 12:35:27
346
原创 P10554 [ICPC 2024 Xi‘an I] Turn Off The Lights
这种做法是一种思维惯性式的贪心做法,其实我自己也无法完全证明,一开始想着把第一列全变为1的目的是为了过样例1,最后顺着思路贪心写交一下居然过了,看了题解发现题解做法比我的写法复杂的多(bitset加速的N^3枚举,复杂度O(n^3/64)),所以只有两种可能:1,题目测试数据有问题。先把第一列变为全0,然后枚举第i(2<=i<=n)列,是否翻转更优(翻转后能让1的数量变少),最后枚举1-n行是否翻转更优,然后判断剩余的1的数量是否<=k。有一天,Kitty 发现有些灯是开着的,有些是关着的。
2025-03-29 11:55:41
334
原创 2024ICPC沈阳 E. Light Up the Grid
令dp[ms][j]表示“最小总代价”,使得存在一串操作序列,满足两个条件:对于掩码 ms 中每一位为 1 的初始状态,序列中存在至少一步操作使得该状态变为全亮(15);这串操作序列最后一次操作结束后,网格的状态为 j。这里,ms 是一个 16 位的掩码,每一位对应题目中可能的 16 种初始状态(0~15)。例如,若 ms 的第 8、4、2、1 位为 1,则表示题目给定的初始状态分别为 8、4、2、1已经“被覆盖”。而 j 表示当前操作序列执行结束后网格的实际状态。网格状态与操作。
2025-03-19 06:05:55
875
原创 codeforces 2021C2 C2. Adjust The Presentation (Hard Version)
这样我们就拆解成两个操作:删除和插入,我们可以发现这两次操作的影响程度有限,只局限与改变附近的数字的状态,我们可以维护一个非法状态的贡献来做。容易想到可以用set维护数字在数组b中出现的位置,我们只需要关注最早出现的位置也就是begin就可以了。虽然思路容易想出来,但是代码实现起来还是比较麻烦,可能会堆出很大的码量。代码这里参考了别人一段简洁的题解。/对于q个查询将b[x]=y的操作,我们可以看做先将b[x]上的数字暂时删除,然后再将y放到这个位置上。,详细细节解释见注释。
2025-02-26 20:37:05
121
原创 蓝桥杯2024年第十五届省赛真题题解(部分)
在i和j之间建边,由于字符串i和j是一个环形,也就是起点不确定,那么边权取i和j所有可能的状态中最长公共子串的长度的最大值。这个过程可以用dp实现。建完边后用kruskal算法求出最大生成树算出边权和就是答案。思路:可以用记忆化搜索sg函数做,设当前数字为x,枚举所有可能用到的质数,如果有一个质数的状态是必败则当前状态为必胜,一些细节写在注释上。
2025-01-14 22:40:22
1027
原创 怀化学院2024年ACM基地第二轮招新机试题解
比赛地址:https://www.nowcoder.com/acm/contest/96304。【邀请码:acm20241115】
2024-11-16 23:28:55
755
原创 怀化学院2024年ACM基地第一轮招新机试(23级专升本)题解
需要会快速幂算法,取模细节比较多,任意一个容易爆long long的运算都需要取模,最后还需要将结果取为正数。bfs板子题,从给定的坐标点出发宽搜完了之后标记所有点就行了,没有标记过的点就输出NO。记录当前左括号的数量,遇到右括号时如果有左括号就匹配,左括号--,答案++读懂题目就不难做,考虑每种情况就行了,只有四种对战情况,满足就cnt++二分板子题,可以调用bound函数或者自己写一个二分函数。按坐标dfs会超时,按列dfs就行了。下标映射完了之后排序输出就行。
2024-11-02 20:19:17
717
原创 Fragmentation merging(2021湖北省赛)
N<5000考虑N^2做法,枚举合并后的集合C,判断其是否能被得到(也就是选最多两个区间能覆盖这个集合)。记录下数字对应的下标,枚举集合[i,j]是否能被选到,用一个数组记录下集合中对应元素的下标位置在哪,边枚举边维护覆盖集合C需要的区间数量。题意:给定一个1-n的排列,选取两个区间,所选取的两个区间的下标不能重合(比如选[1,3]和[2,4]),把这两个区间合并后得到的集合必须是连续的。
2024-10-07 18:09:35
191
原创 Covering(HDU 6185)(矩阵快速幂)
想规律的时候可以从题目的一些小提示入手,题目给的行固定是4,可以想到递推式应该从4之后才满足某种规律,纸上比划一下就可以发现f[n] = f[n-1] + f[n-2]*5 + f[n-3] - f[n-4]因此直接矩阵快速幂就好了,有个细节需要注意的是f[n]取模之后再减去f[n-4]可能为负数,所以答案要变为正数才行,还有矩阵构造的一些细节在代码注释上。给定一个4*n大小的矩形,将1*2或2*1的矩形往里面填,有多少种能填满的方法。可以看到n很大,肯定不能dp求解。
2024-09-20 14:50:16
235
原创 E - Lunch(博弈论,推sg函数)
典型的博弈论问题,先分析一下每个石子的sg函数,首先很明显的,质数的sg函数值都是1,对于非质数,拿6举例,可以这么分,分为6个1,分为3个2或者分为2个3这三种状态,每种状态的sg值其实就是他们各自的sg值的异或和,比如2 2 2 这个状态,因为sg(2)=1,所以三个2的异或值为1。所以sg(6)=mex{0,1}=2。给了n堆石子(蛋糕),每个石子的个数为ai,可以将石子分为k份,其中ai%k==0,没得分的人算失败,问先手必胜还是必败。如果像这样正常求sg值肯定会超时,考虑别的方法。
2024-08-29 18:56:27
225
原创 F - 见面礼
给定一个 n 个点 n 条边的无向图,你需要求有多少种选择图上的一个点 p 和一条边(x,y) 的方案,使得删去(x,y) 后图变成一棵树,且这棵树以 p 为根时每个节点的儿子个数均不超过 3。如果点的连边数量等于4并且这个点是环内的点,那么会多两种合法方案。如下图所示会多出1-2 选1的方案和1- 3 选1 的方案。如果点的连边数量等于5,那么能选的边的数量就永远只有两个,就是这个点连接环的那两条边。这点看题目给出的样例应该可以理解。所以答案就是合法的边数*合法的点数加上连边==4的点的合法方案。
2024-08-25 20:11:27
256
原创 D - Lucky Coins(概率)
需要注意的是,(1-f[i][j])表示这种硬币在第j轮至少还剩下一个硬币的概率,但是他不能表示仅在第j轮有剩的概率,因为他可能包含了后面轮数还有剩的概率,所以我们要想表示他仅在第j轮有剩的概率还要减去(1-f[i][j+1])给出n种硬币和他们的数量还有他们掷出正面朝上的概率,每一轮会投掷场上的所有硬币,只有正面朝上的硬币会留在场上,反面的硬币会被淘汰。求对于每种硬币只有他们最后能留在场上的概率。对于每种硬币,设他们数量为c,正面朝上的概率为p,那么他们在第n轮就全部淘汰的概率为。
2024-08-12 21:44:53
312
原创 C - Empty Convex Polygons
枚举O点是o(n)时间复杂度,dp枚举i,j是o(n^2)时间复杂度,总时间复杂度是o(n^3)对于每一个点O,dp[i][j]表示以Oi和ij为凸包最后两边所构成凸包面积的最大值。然后因为题目给的都是整数坐标点,那么答案的小数点要么是.0要么是.5,直接输出一位就行。,求一个面积最大的凸多边形,凸多边形中是空的没有其他点。
2024-08-03 09:19:20
168
原创 E - Resistors in Parallel
也就是分子一定是6,那么分母就是12。其实不难看出除1外这些数字都是前几个素数的乘积,并且这个乘积小于等于n,因为毕竟策略数本身就是前n个中数选的。给定n个电阻,第i个电阻的阻值是i,如果i是平方数的倍数,那么阻值是正无穷大。而且可以看出n越大,能选的策略数就越多,最佳电阻就越小,后面更多的策略数对应的最小电阻肯定是小于等于前面策略数能选出的最小电阻的。n最大是10^100,因为答案是素数乘积,其实很快就能乘爆这个数,我们打印前1000个素数肯定够用了,因为涉及到大数运算,用python更加方便。
2024-07-28 00:45:30
382
原创 D - Country Meow
每次找到距离p点的最远点,设p点到当前最远点的距离为len,更新p点,让p点走len的一部分长度逼近当前最远点,然后让这个部分越来越小,比如第一次走len的三分之二,第二次走len的三分之一。以这个点为圆心,这个点到最远点的距离为半径的球就是最小的能够覆盖所有点集的球。也就是找最小覆盖球。考虑一种逼近算法,我们想要从原点坐标p开始逼近,逼近到我们想要的圆心坐标。给定三维坐标中的n个点,求一个点使得其到最远点的距离最小。第三次逼近:最远点是2,走更小一部分长度。第一次逼近:最远点是1,走一部分长度。
2024-07-25 14:21:53
660
原创 F - Tournament(构造)
可以发现他们之间的每一行由上一行而来的变化规律,当k为奇数的时候,相邻之间两两交换,把当k为2的时候,第一个元素和第四个元素交换,第二个元素和三个元素交换,当k为4的时候,第一个元素和第八个元素交换,第二个元素和第七个元素交换..可以发现是由区间长度从外向内交换的。知道原理代码就好实现了,我们创建一个二维mp数组,对第0行赋值1-n,后面每一行都由上一行交换得来。可以发现这个性质对行数为奇数时也成立,因为奇数的最低位1就是最后一个。可以dfs暴力打表找出规律或者在纸上写也可以,n=16的时候是这样子的。
2024-07-23 21:39:41
341
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人