- 博客(13)
- 问答 (1)
- 收藏
- 关注
原创 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 131
原创 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 299
原创 并查集的一些操作
/下面代码是将一组元素合并到一个集合中,使得这组元素有一个共同的根节点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 285
原创 双指针算法,位运算,离散化
unique函数是去重,会把重复元素放到最后,返回的是 重复数字开始的位置。②lowbit(x),返回x的最后一位1的位置。return r + 1//映射到1,2 ...,n。①在两个序列中,一个指针指向一个序列,另一个指针指向另外一个序列。while(l < r)//找到第一个大于等于x的位置。
2024-04-20 12:54:07 799
原创 Educational Codeforces Round 164 (Rated for Div. 2) -B,C
当两个数的和固定时,当两个数的差值越小,乘积越大。知道这个知识后就好做了,我们只需让两个数不断接近即可。(等我有时间搞个合集)
2024-04-17 23:31:17 189
原创 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 446 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 124
原创 高精度算法:(有时间补充)
Ai-Bi-t(t表示上一位有没有借位,如果借位了,t=1,反之,t=0)数组第0位存放个位数。因为会有进位问题,在数组最后加上比较简单。要保证A>=B.如果反之的话,就计算B-A,去负号。这里的乘数是一个大整数乘以一个比较小的数。这里是把乘数 b看成一个数 ,就是一起乘。先从个位开始减,不够减的话就向前借位。如果存在负数,分情况讨论。一个高精度除以一个低精度。大整数存储都是一致的。
2024-04-17 15:14:56 178
原创 归并排序 c++语言
有两个指针·指向两个有序序列的开始位置(该位置就是该序列的最小值),设一个新数组去存储答案。再比较两个指针指向的数的大小,较小的作为两个序列合成的新序列的最小数。如果指针一的更小,则指针一向右移动,再比较指针一和指针二指向的数。如果此时,另一指针未指向最后位置,则从另一指针的位置开始直接放到新序列后面。①确定分界点:mid = ( l + r ) / 2;以整个数组的中间部分,分为左边和右边。2.时间复杂度:nlog(2)n;一共log(2)n层,每层O(n).(把两个有序序列合二为一)。
2024-04-15 17:24:55 111
空空如也
比较大小C语言 这个代码哪里错了,为什么PTA上显示部分正确
2023-09-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人