05 2026 档案

摘要:Mocha 认为一个数组 a 是美丽的,如果存在两个下标 i 和 j(1 ≤ i, j ≤ n,i ≠ j),使得对于所有 k(1 ≤ k ≤ n),a_k 都能被 a_i 或 a_j 整除。 首先,一个数组的最小值一定是ai和aj其中之一,那么首先选取最小值,然后将数组中最小值的倍数全部消去,同理 阅读全文
posted @ 2026-05-31 17:45 thy825 阅读(4) 评论(0) 推荐(0)
摘要:给定四张牌,每人两张,一名玩家赢得整场游戏的条件是:他赢得的回合数严格多于对手(即比对方多) 要么1:0,要么2:0,简单的暴力枚举就行,当时想把所有情况提前模拟出来,发现好蠢,给出确定abcd,每人翻牌两种可能性,总共为四种,模拟四种情况得分 include<bits/stdc++.h> usin 阅读全文
posted @ 2026-05-31 17:37 thy825 阅读(4) 评论(0) 推荐(0)
摘要:课程志愿分为 k+1 个优先级(k ≤ 20),其中 1 级最高,k+1 级最低 前 k 个志愿级别有容量限制,一开始前k个都满足 策略:从后往前,一个一个变到k+1级,不会超出限制 include<bits/stdc++.h> using namespace std; int a[100],b[1 阅读全文
posted @ 2026-05-31 17:18 thy825 阅读(3) 评论(0) 推荐(0)
摘要:有一个h*n网格,可以最多放置两个排水口,可以通过向下、向左或向右移动(不穿过泥土格)到达该排水口的水格都会被排走 在第 i列中,底部ai格是泥土,其余在上方的格子是水。 先考虑放置一个排水口,用cnt[i]代表在a[i]+1处放置排水口能排除水量 如果选两个排水点i,j,那么cnt[i]+cnt[ 阅读全文
posted @ 2026-05-18 18:39 thy825 阅读(4) 评论(0) 推荐(0)
摘要:给定一个数组a和数字s,给定F=a1x2+y2x3+y3x4+...+yn-1an 其中xi+yi=ai(2<=i<=n-1),并且要求(xi-s)(yi-s)>=0 由分析得假设yi-1xi+yixi+1中yi-1<xi+1那么此时在xi+yi固定的情况下,应该让xi尽可能大,由此可知,xi和yi 阅读全文
posted @ 2026-05-18 16:22 thy825 阅读(3) 评论(0) 推荐(0)
摘要:A题 由0,1,2构成字符串,每一次操作选子序列,要求子序列和为3的倍数 一个单独的0,一个1和一个2,三个1或者三个2(没考虑到) 用0个数加上,1个数和2个数最小值,再看剩余的1或者2,能分出几个个数为3的 int ans=max(cnt1,cnt2)-min(cnt1,cnt2); cout 阅读全文
posted @ 2026-05-17 14:15 thy825 阅读(5) 评论(0) 推荐(0)
摘要:B 银币总数kg,分配规则:r=x%g,如果r>=g/2(向上取整),实际获得x + (g - r),否则获得x-r 求节省的最大,对于每个人来说,最多能节省g/2(向上取整)-1个银币,但为了确保银币总数是kg,可以让n-1个人节省g/2(向上取整)-1个银币,最后剩下的分给一个人 设x=g/2( 阅读全文
posted @ 2026-05-12 16:03 thy825 阅读(4) 评论(0) 推荐(0)
摘要:题目描述: 采用类似筛法的思想 范围给到1e6,可以枚举每个d,如果已经在数组中出现,直接continue,想要构造出d,至少要有两个d的倍数gcd=d,因为gcd具有非递增性,所有d的倍数的gcd一定不小于d,因为都是d的倍数,并且所有数gcd同时也是小于等于任意两个数gcd,所以d所有倍数gcd 阅读全文
posted @ 2026-05-11 17:35 thy825 阅读(3) 评论(0) 推荐(0)
摘要:C题 给定v=xy,让求v的所有因数a的a次方之和 将x和y分别分解因数,根号级别复杂度 v的所有因数,本质上就是x和y的所有因数分别相乘,再进行去重 注意,在这里得到的因数不能直接取模,不然去重后会比正确答案的元素少,可能存在去重之前不想等的因数,去重后相等了,而且因数不会超过long long 阅读全文
posted @ 2026-05-11 17:07 thy825 阅读(4) 评论(0) 推荐(0)
摘要:B题 资源合成与最大化问题,属于数学模拟或贪心类型 金:a,银:b,铜:c x个铜换一个银,y个银换一个铜,换一次铜掉落一个铜 关键点在于掉落一个铜,那么就又有可能生成一个金,所以用while一直模拟,不能只模拟一轮 while(c>=x||b>=y) { b+=c/x; c=c%x; a+=b/y 阅读全文
posted @ 2026-05-10 18:00 thy825 阅读(4) 评论(0) 推荐(0)
摘要:给两个正方形矩阵,可以进行子矩阵转置,就是关于子矩阵主对角线元素对称的进行交换,问操作完两个矩阵能否相同 也就是副对角线上元素可以任意交换 看所有副对角线,将每个副对角线元素放到集合里,排序观察是否相等 其中vector排序后可以直接看两个vector是否直接相等,可以优化 for(i=2;i<=n 阅读全文
posted @ 2026-05-09 15:29 thy825 阅读(3) 评论(0) 推荐(0)
摘要:给定x个节点子树大小为偶数,y个节点子树大小为奇数 明确一点,叶子节点字数大小为1,那么一个偶数大小的节点至少跟着一个奇数节点,所以x必定<=y 再考虑整个树的根,根的子树大小为x+y,如果x+y是偶数,那么此时应该至少有一个偶数节点,即x>0 同理,如若x+y是奇数,那么y>0 满足以上三个条件的 阅读全文
posted @ 2026-05-09 14:53 thy825 阅读(5) 评论(0) 推荐(0)
摘要:对于已经将礼物送出去的i,即f[i]>0的,不用改变也不能改变,只需把剩下的没发礼物的和没收到礼物的,让他们一一对应,并且不出现f[i]=i的情况,也就是没有人将礼物发给自己 vector f(n + 1), hasGift(n + 1, 0); vector senders, receivers; 阅读全文
posted @ 2026-05-09 14:05 thy825 阅读(4) 评论(0) 推荐(0)
摘要:给出中序和后序,让给出前序, 前序:根 左 右 中序:左 根 右 后序:左 右 根 前序永远先输出根,那么我就可以根据后序和中序不断找根不断输出 利用dfs找根,substr可以截取字符串指定部分 pos就是在中序中根的部分,0到pos-1就是左子树,右边即为右子树 注意此时的左子树长度未必等于右子 阅读全文
posted @ 2026-05-07 20:29 thy825 阅读(5) 评论(0) 推荐(0)
摘要:C题 最开始想先处理左右都互质得,再处理与右边互质得,还把a[i]=1的给忘了,数组也开小了,在处理等于1时,直接让a[i]=a[i-1]*a[i+1],这是错误的,如果右边也是1,这样操作浪费了一次操作,没有正确修改,0与任何数都不互质,可以将a[i]修改为0,并且写法也麻烦 第一版代码链接:ht 阅读全文
posted @ 2026-05-07 20:20 thy825 阅读(4) 评论(0) 推荐(0)
摘要:通过用例分析不难知道,k的范围应该是[n,2n-1],,最小值为n,不难证明,每次翻的两个都是相同的,下面给出最大值2n-1证明 记出现过的为s,未出现过的为u 如果当前这位为s,那么s消耗了一轮 如果当前是u 下一位也是u,也就是uu,每个u各消耗0.5轮 如果是us(二者不同),共消耗两轮, 如 阅读全文
posted @ 2026-05-07 20:03 thy825 阅读(5) 评论(0) 推荐(0)
摘要:做法不难想,但实现起来有点困难,每个数组在最后的位置,都取决于最后一次出现的位置,所以不难想到, 1.在读入数据时,将数组反转 reverse(v[i].begin(),v[i].end()); 2.同一数组中出现重复元素会影响,比如用例中5,不去重会输出 1 1 4 3 2 5 4 6 3 5 5 阅读全文
posted @ 2026-05-07 19:48 thy825 阅读(3) 评论(0) 推荐(0)
摘要:D题 想到了暴力让每个i作为起始点向后操作,其实一个i就两种选择,前边选择会直接影响后边,只需要考虑a1做出两种选择暴力即可,忽略了首位决定性作用,代码没怎么精简 const int N=200010; int a[N],b[N]; void solve() { int n,i,j,sum=0; c 阅读全文
posted @ 2026-05-06 14:41 thy825 阅读(7) 评论(0) 推荐(0)