- 博客(15)
- 问答 (1)
- 收藏
- 关注
原创 Codeforces Round 969 (Div. 2) ---C
先分析A==B的情况,那么最终答案一定小于A,否则,我们依然可以通过最小值+A,使得数组中所有元素都大于max(wi)减A,这是因为假如之前数组中最小值通过+A变成了最大值,那之前未操作时所有的元素(除去最小元素)都大于这个操作后的最大值减A。例如,数组 [1,2,3,4][1,2,3,4] 的取值范围是 4−1=3,数组 [5,2,8,2,2,1] 的取值范围是 8−1=7,数组 [3,3,3]的取值范围是 3−3=0。的情况下的余数,这样我们可以把元素分成几类,每一类的元素的模值相同。
2024-09-03 12:11:03 445
原创 2022 ACM-ICPC 网络赛(1)
这里很多人害怕会枚举炸了,但是我们仔细想一下,只要保证dfs的过程中,没有重复的情况,那么我们最多就5e5种状态。因为我们需要放置0,如果这个时候二进制的长度加上1的个数(也就是0的个数)大于了30,那我们就剪枝。Case1的递归优先与Case3,及每次递归都是先尝试添加”1“的序列,再处理”0“的情况。这里是为了添加一个“1”,继续递归,探索添加一个“1"的可能,以便构建更长的序列。一个好数的定义:它的二进制表示中1的个数等于其末尾连续0的个数。询问次数为T(1<=T<=1e5).未完待续......
2024-09-02 17:33:56 435
原创 Codeforces Global Round 25-- B and Codeforces Round 937(Div - 4) -- D
你希望你的奶牛在尽可能多的比赛中获胜。你可以要求他们只交换你的奶牛与另一头奶牛的位置一次,或者你可以选择什么都不做。如果 p < k,则找到第二个大于 a[k]的牛的位置tp。tp - p - (p == 1),就是在p 和 tp之间可以获胜的次数。之后 的 第i场比赛则是 位置为 i+1 的和在 第 i-1 场比赛获胜的 牛比赛。找到第一个大于 a[k]的牛的位置p,如果p > k ,最终结果就是 p-2.第一场比赛是 在位置1 和位置 2的牛比赛。找到你的奶牛可以达到的最大获胜数。
2024-05-07 20:51:40 166
原创 Codeforces --- Round 943 (Div 3) - D and Educational Codeforces Round 165(Rated for Div 2) - B
找到从初始位置开始 每个玩家可以到达的位置,记录下来。然后循环遍历轮数,找到每次可以的最大得分。(因为可以继续停留在当前位置,这也是要计分的)。题目大意:有一个排列,由1-n数字组成的n个不太元素的数组。现在有两个人B和S玩游戏。数组a记录每个位置的价值,p就是排列数组,记录位置。他们两个选择了排列中的起始位置。找到得分最大的玩家。
2024-05-07 18:41:49 344
原创 并查集的一些操作
/下面代码是将一组元素合并到一个集合中,使得这组元素有一个共同的根节点fa。//如果是fa还未初始化的话,则将fa初始化为 x所属集合的根节点。if(fa === fb) cout<<"属于同一个部落"<<endl;//如果是后来的节点,并且,新节点所属集合的根节点不是fa,//则将当前节点的根节点fx的父节点 设置为 fa。//相当于将 x 所在的集合合并到fa的集合中。//找到a,b所属集合的根节点。//p[i]表示节点i所属的集合。//find函数是找到x的根节点。
2024-04-23 23:04:21 307
原创 双指针算法,位运算,离散化
unique函数是去重,会把重复元素放到最后,返回的是 重复数字开始的位置。②lowbit(x),返回x的最后一位1的位置。return r + 1//映射到1,2 ...,n。①在两个序列中,一个指针指向一个序列,另一个指针指向另外一个序列。while(l < r)//找到第一个大于等于x的位置。
2024-04-20 12:54:07 831
原创 Educational Codeforces Round 164 (Rated for Div. 2) -B,C
当两个数的和固定时,当两个数的差值越小,乘积越大。知道这个知识后就好做了,我们只需让两个数不断接近即可。(等我有时间搞个合集)
2024-04-17 23:31:17 271
原创 2021-JSCPC-Longest Continuous 1
Let's use pk to denote the prefix of s(s的下标是10的100次方) of length k. Now given k, please calculate the length of the longest continuous 1 in pk.
2024-04-17 19:41:03 512 2
原创 PTA--数列求和-加强版
给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。关键理解: arr[cnt++]=(a*(n-i)+t)%10;语句的目的是判断最后是否有进位,如果有进位,则将进位值存入数组。(hh,还没学会高级功能·)输出其N项数列之和S的值。输入数字A与非负整数N。
2024-04-17 15:50:57 160
原创 高精度算法:(有时间补充)
Ai-Bi-t(t表示上一位有没有借位,如果借位了,t=1,反之,t=0)数组第0位存放个位数。因为会有进位问题,在数组最后加上比较简单。要保证A>=B.如果反之的话,就计算B-A,去负号。这里的乘数是一个大整数乘以一个比较小的数。这里是把乘数 b看成一个数 ,就是一起乘。先从个位开始减,不够减的话就向前借位。如果存在负数,分情况讨论。一个高精度除以一个低精度。大整数存储都是一致的。
2024-04-17 15:14:56 195
原创 归并排序 c++语言
有两个指针·指向两个有序序列的开始位置(该位置就是该序列的最小值),设一个新数组去存储答案。再比较两个指针指向的数的大小,较小的作为两个序列合成的新序列的最小数。如果指针一的更小,则指针一向右移动,再比较指针一和指针二指向的数。如果此时,另一指针未指向最后位置,则从另一指针的位置开始直接放到新序列后面。①确定分界点:mid = ( l + r ) / 2;以整个数组的中间部分,分为左边和右边。2.时间复杂度:nlog(2)n;一共log(2)n层,每层O(n).(把两个有序序列合二为一)。
2024-04-15 17:24:55 147
空空如也
比较大小C语言 这个代码哪里错了,为什么PTA上显示部分正确
2023-09-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人