CodeForces 1300分 板刷

文章目录

CodeForces 1300分 板刷

一、Matching Numbers

Matching Numbers

思路

  • 思考什么情况不能配对成功
    (1)首先已知加和得到的是一个等差数列,我们设等差数列的首项为 a 1 a_1 a1,末项为 a n a_n an,设等差数列的和为 s = ∑ i = 1 i = 2 n i s=\sum_{i=1}^{i=2n}i s=i=1i=2ni
    (2)等差数列性质: a n − a 1 + 1 = n a_n-a_1+1=n ana1+1=n,以及 ( a 1 + a n ) ∗ n 2 = s \frac{(a_1+a_n)*n}{2}=s 2(a1+an)n=s,得到
    { a n − a 1 + 1 = n a n + a 1 = 2 s n \begin{cases} a_n-a_1+1=n\\ a_n+a_1=\frac{2s}{n} \end{cases} {ana1+1=nan+a1=n2s
    求出 a 1 , a n 为 a_1,a_n为 a1,an
    { a n = 2 s n + n − 1 2 a 1 = 2 s n − n − 1 2 \begin{cases} a_n=\frac{2s}{n}+\frac{n-1}{2}\\ a_1=\frac{2s}{n}-\frac{n-1}{2} \end{cases} {an=n2s+2n1a1=n2s2n1
    因为 a 1 , a n a_1,a_n a1,an均为整数,所以 n − 1 n-1 n1为偶数。
  • 匹配成功的情况推导一下很简单可以得到。

二、Sets and Union

Sets and Union

思路

用bitset模拟集合运算更为方便

三、Divisor Chain

Divisor Chain

思路

x x x 2 k 2^k 2k时,每次减去 2 k − 1 2^{k-1} 2k1,可以保证直到减到 1 1 1都不会有重复的元素。所以就要将 x x x变为 2 k 2^k 2k,将 x x x的二进制下的,最高位的1后面的位全变成 0 0 0即可,每次使用 l o w b i t lowbit lowbit找到一个约束,这样在变成 2 k 2^k 2k的过程中,可以保证不重复。

四、Insert and Equalize

Insert and Equalize

思路

要保证次数最小选取的 x x x一定要是,所有元素和最大元素的最大公约数。 a [ n + 1 ] a[n+1] a[n+1]的选取只需要选第一个差值没有出现过的数即为最优。

五、Qingshan Loves Strings 2

Qingshan Loves Strings 2

思路

若两头的字符相同时,在中间位置添加元素是没有意义的,所以应该从两头开始添加,优先让两头不同。若 n n n为奇数的时候,中间的数无论如何都会和它本身相等。

六、Insert Zero and Invert Prefix

Insert Zero and Invert Prefix

思路

首先最后一位为1的一定不可能,因为1只能由0翻转得到,这样的话,1的后面一定要有0。
再来看 1 1 0这样的数组,一定是两个零放在前面,最后一个零放在最后面使得前面两个零翻转成1。
所以要看零插入在哪个位置后面,就要看前面有几个连续的1,若有两个连续的1,那么零就放在2个零后面,也就是位置2。

七、Salyg1n and the MEX Game

Salyg1n and the MEX Game

思路

由于Bob每次只能拿走严格小于Alice放置的那个数,所以Bob拿走一个数后,MEX一定会减小,Alice为了维护较大的MEX,只能选择放回Bob拿走的数。Alice第一次操作确定了MEX,剩余操作都是在维护这个MEX。
确定了两者的最优策略以后,就围绕最优策略展开即可。

八、Particles

Particles

思路

动态规划,奇数位和奇数位合并,偶数位和偶数位可以合并,所以奇数偶数分别进行动态规划即可。

九、Parity Shuffle Sorting

Parity Shuffle Sorting

思路

可以先将两端变成相同的数,若 a i + a 1 a_i+a_1 ai+a1是奇数,则可将 a i a_i ai变成 a 1 a_1 a1,若为偶数,可将 a i a_i ai变成 a n a_n an

十、## Make Nonzero Sum (easy version)

## Make Nonzero Sum (easy version)

思路

首先如果数组长度为奇数,那么一定无解。证明如下:
我们设将数组求和,记为 s s s

  • 若将 1 → − 1 1\rightarrow -1 11 s = s − 1 + ( − 1 ) = s − 2 s=s-1+(-1)=s-2 s=s1+(1)=s2,s的奇偶性不变。
  • 若将 − 1 → 1 -1\rightarrow 1 11 s = s + 2 s=s+2 s=s+2 s s s的奇偶性不变。
    故当对任意数取反后, s s s的奇偶性都保持不变,所以当序列长度为奇数时,任意的 − 1 -1 1 1 1 1的和都为奇数,无论如何都不会等于0。

十一、Elemental Decompress

Elemental Decompress

思路

  • 当数组中某一元素没有出现过时,就可以作为填补元素
  • 当数组中某一元素只出现一次时,该位置的p,q都放这个数即可。
  • 当数组中某一元素出现两次时,该元素分别放在p,q的对应位置,p对应的q以及q对应的p放填补元素中,第一个小于数组该元素的元素。
  • 当出现三次及以上时,是不可能能合法的。
    注意,元素大小为1,n的情况需要特判。

十二、Permutation Operations

Permutation Operations

思路

  • n n n n − 1 n-1 n1的前面,即是一个逆序对,令 n + 1 n+1 n+1 ( n − 1 ) + 2 (n-1)+2 (n1)+2,那么
    ( n − 1 ) + 2 > n + 1 (n-1)+2>n+1 (n1)+2>n+1,所以一定可以消去一个逆序对。
  • n n n n − 1 n-1 n1的后面,即不是一个逆序对,令 n + 1 n+1 n+1 ( n − 1 ) + 2 (n-1)+2 (n1)+2,则 n + 1 → n + 1 + 2 n+1\rightarrow n+1+2 n+1n+1+2,那么 ( n − 1 ) + 2 < n + 1 + 2 (n-1)+2<n+1+2 (n1)+2<n+1+2,也不会改变原大小关系。
    所以无论 n n n n − 1 n-1 n1的位置关系如何,只需对 n n n加1,对 n − 1 n-1 n1加2,便可消去这个逆序对,其他的同理。

十三、Get an Even String

Get an Even String

思路

每次消去最近的两个相同字符中间的字符即可。这样一定是最优的。

十四、Trouble Sort

Trouble Sort

思路

b b b为全零或全一时,只有原 a a a有序,才是合法的,当 b b b有0和1时,最终总能得到合法结果。

十五、Mere Array

Mere Array

思路

将数组排序,看原数组的元素的位置,是不是在正确的位置上,如果不是,就看看它能不能整除最小元素,如果位置不正确且不能整除最小元素,说明它不能与其他任何元素交换位置,也就无法换到正确位置上面。

十六、Number into Sequence

Number into Sequence

思路

由题意, a i + 1 ≥ a i a_{i+1}\geq a_i ai+1ai,所以数组a应当是严格非递减的,又因为 a 1 ∗ a 2 ∗ … … ∗ a k = n a_1*a_2*……*a_k=n a1a2……ak=n,所以要想使得数组长度最长,数组中每个元素应当相等。根据唯一分解定理,找到幂次最大 ( c i ) (c_i) (ci)的那个底数 ( a ) (a) (a)作为前 c i − 1 c_i-1 ci1个数,最后一个数为 n a k − 1 \frac{n}{a^{k-1}} ak1n

  • 这里为什么只作为前 c i − 1 c_i-1 ci1个数呢,因为要保证最后一个数要是 a a a的倍数,所以要在最后一个数中保留一个 a a a作为它的一个因数。

十七、Nastia and a Good Array

Nastia and a Good Array

思路

由题意可以知道,整个数组中的最小值是一定会保留的,而如果想使相邻的两个数的最大公约数为1的话,最简单的方式就是使得 a i = a i − 1 + 1 a_i=a_{i-1}+1 ai=ai1+1或者 a i + 1 = a i − 1 a_i+1=a_{i-1} ai+1=ai1,所以就从最小值的位置向两边扩展即可。

十八、Prefix Flip (Easy Version)

Prefix Flip (Easy Version)

思路

当第 i i i个元素 a i ! = b i a_i!=b_i ai!=bi时,翻转长度为 i i i的前缀一次,再翻转长度为 1 1 1的前缀一次,再翻转长度为 i i i的前缀一次,经过三次操作后,前缀长度为 i − 1 i-1 i1的字符翻转两次,大小不变。第 i i i个元素翻转三次,大小变为相反的。

  • 这种题考虑翻转的奇偶的性质,即奇数次翻转变为相反,偶数次翻转大小不变。

十九、Di-visible Confusion

Di-visible Confusion

思路

每一个位置 i i i的元素,如果可以被 2 → i + 1 2\rightarrow i+1 2i+1中任意一个数整除的话,说明这个元素至少是 l c m ( 2 → i + 1 ) lcm(2\rightarrow i+1) lcm(2i+1)的倍数,而 l c m ( 2 → 23 ) > 1 e 9 lcm(2\rightarrow 23)>1e9 lcm(223)>1e9,则说明,只需要看前 21 21 21个元素中,有没有一个元素满足 a i % ( l c m ( 2 → i + 1 ) ) = = 0 a_i\%(lcm(2\rightarrow i+1))==0 ai%(lcm(2i+1))==0的,如果有,那么这个元素无论如何不可以被删除。当元素位置大于 21 21 21时,一定存在一个 j = i + 1 j=i+1 j=i+1使得 a i % j ! = 0 a_i\%j!=0 ai%j!=0

二十、Knapsack

Knapsack

思路

可以用贪心的思路,从第一个小于 w 2 \frac{w}{2} 2w的数开始,从大到小枚举,然后取次大的,判断累计重量是否处于 [ ⌈ w 2 ⌉ , w ] [\lceil\frac{w}{2}\rceil ,w] [⌈2w,w],若不处于,则再加一个也不会超过 w w w

二十一、Madoka and Childish Pranks

Madoka and Childish Pranks

思路

本题不限修改次数,我们可直接简单考虑
0 1 0\\ 1 01 01 01 01这两种子棋盘情况,由于0出现在上面或者左边,所以应该从右下向左上进行修改,这样才能保证可能被0覆盖的1还能再改成1。

二十二、Ehab and a Special Coloring Problem

Ehab and a Special Coloring Problem

思路

分别将 i i i i i i的倍数全赋值成一样的值,用埃氏筛来实现即可。

二十三、Anti-Sudoku

Anti-Sudoku

思路

每一行、每一列、每一个3*3方格都是1~9,9个数构成,所以任取一个数,将整个数独中的所有这个数全改成不同的数即可。

二十四、Social Distance

Social Distance

思路

记录下最近的右边的那个 1 1 1的位置,遍历一遍即可。

二十五、Coin Rows

Coin Rows

思路

由于只能向下或向右移动,所以只需要枚举Alice每次向下移动的位置,计算第一行这个位置的右边的和,和第二行这个位置左边的和的最大值的最小值即可。

二十六、Twist the Permutation

Twist the Permutation

思路

  • i i i次移动时,第 i i i个数的移动次数,只与第 i i i次移动的次数有关
  • i + k i+k i+k次移动时,第 i i i个数的移动次数,还与第 i i i次往后的移动次数有关
  • 所以第 i i i个数的移动次数只与 i → n i\rightarrow n in之间每一次的移动数据有关
  • 故可以从n往1推,前 n − 1 n-1 n1个数减去第 n n n个数的移动次数,以此类推。

二十七、Ice and Fire

Ice and Fire

思路

当后缀有连续 k k k个1时,必定有 ( 1 → k ) (1\rightarrow k) (1k) k k k个人无法胜利,因为 ( 1 → k ) (1\rightarrow k) (1k)任意一个数前面都没有 k k k个比它小的数,所以这个这 k k k个数一定保留不下来。第 i ∈ ( k + 1 , n ) i\in(k+1,n) i(k+1,n)获胜可以在前 n − k − 2 n-k-2 nk2轮里让 ( k + 1 , n ) (k+1,n) (k+1,n)内除 i i i以外的数自相残杀,剩余的一个数和1打,一定是 1 1 1赢,故就剩下了 [ 1 , l ] [1,l] [1,l] i i i这几个数,无论如何都是 i i i赢,后缀为连续 k k k个0时同理。

二十八、Packets

Packets

思路

任何一个十进制数都可以由,小于等于它的数个二的次方加和而来,并且这样子加和是加数最少的。

二十九、Vasya and Isolated Vertices

Vasya and Isolated Vertices

思路

一个 n n n个顶点和 m m m条边的无向图中:

  • 若要孤立顶点最少,那么一条边尽量多连顶点,而一条边最多连2个顶点可知道,孤立顶点最少的情况下是 m a x ( 0 , n − 2 ∗ m ) max(0,n-2*m) max(0,n2m)
  • 若最多,则一个顶点尽可能多的连边,加入的每个新节点,都应与原集合中的所有顶点有一条边。

三十、Oh Those Palindromes

Oh Those Palindromes

思路

a b c b a abcba abcba a a b b c aabbc aabbc的回文字串数目是相同的。

三十一、Romantic Glasses

Romantic Glasses

思路

o d d odd odd为奇数下标的前缀和, e v e eve eve为偶数下标的前缀和。
o d d r − o d d l = e v e r − e v e l odd_r-odd_l=eve_r-eve_l oddroddl=everevel
o d d r − e v e r = o d d l − e v e l odd_r-eve_r=odd_l-eve_l oddrever=oddlevel
故可用map来存储差,若出现两次,则YES。

三十二、Closest Cities

Closest Cities

思路

求两个前缀和,一个从 1 → i 1\rightarrow i 1i,一个从 n → i n\rightarrow i ni

  • 1 → i 1\rightarrow i 1i 状态转移方程:
    a i − a i − 1 < a i − 1 − a i − 2 a_{i}-a_{i-1}<a_{i-1}-a_{i-2} aiai1<ai1ai2 d p _ f [ i ] = d p _ f [ i − 1 ] + 1 dp\_f[i]=dp\_f[i-1]+1 dp_f[i]=dp_f[i1]+1
    否则 d p _ f [ i ] = d p _ f [ i − 1 ] + a [ i ] − a [ i − 1 ] dp\_f[i]=dp\_f[i-1]+a[i]-a[i-1] dp_f[i]=dp_f[i1]+a[i]a[i1]
  • n → i n\rightarrow i ni思路同理。

三十三、Prefix Permutation Sums

Prefix Permutation Sums

思路

处理出 b b b数组相邻两个数之间的差值,当差值大于 n n n以及某一差值出现过两次及以上时,这个差值一定由两个 a a a组成,或者不存在 a a a可以组成,后面就判断,是否有两个差值中没出现的 1 → n 1\rightarrow n 1n排列的一部分可以组成这个差值,如果可以,就YES,否则NO。

三十四、Make It Permutation

Make It Permutation

思路

排序,set去重,暴力枚举所有插入删除情况,取最小值。

三十五、Ian and Array Sorting

Ian and Array Sorting

思路

a 1 , a 2 , a 3 , a 4 , a 5 a_1,a_2,a_3,a_4,a_5 a1,a2,a3,a4,a5,我们通过三步,一步步的使得 a 2 > = a 1 , a 3 > = a 2 , a 4 > = a 3 a_2>=a_1,a_3>=a_2,a_4>=a_3 a2>=a1,a3>=a2,a4>=a3,而 a n 与 a n − 1 a_n与a_{n-1} anan1的大小关系无法改变,但若 n n n为奇数,那么可以将前 n − 1 n-1 n1个数两两减小,直至 a n − 1 < = a n a_{n-1}<=a_n an1<=an,若 n n n为偶数,只有 a n > = a n − 1 a_n>=a_{n-1} an>=an1时才会合法。

三十六、Colorful Table

Colorful Table

思路

关键在于找到一个数的最左边的大于它的数的位置和最右边的大于这个数的数的位置即可。

三十七、Cake Assembly Line

Cake Assembly Line

思路

假设蛋糕需要向右移动,那么巧克力的最右端点与蛋糕的最右端点的差值的最大值要小于等于巧克力最左端点与蛋糕的最左端点的差值的最小值,这样才能保证能将所有巧克力接住。

三十八、Divisible Pairs

Divisible Pairs

思路

  • a i + a j a_i+a_j ai+aj能被 x x x整除可以知道 ( a i + a j ) % x = 0 (a_i+a_j)\%x=0 (ai+aj)%x=0
    等价于 ( a i % x + a j % x ) % x = 0 (a_i\%x+a_j\%x)\%x=0 (ai%x+aj%x)%x=0,即 a i % x + a j % x a_i\%x+a_j\%x ai%x+aj%x等于 0 0 0 x x x。即当 a i % x = ( x − a j % x ) % x a_i\%x=(x-a_j\%x)\%x ai%x=(xaj%x)%x,满足上面情况。
  • 同理由 a i − a j a_i-a_j aiaj能被 y y y整除,由于 a i % y − a j % y ! = y a_i\%y-a_j\%y!=y ai%yaj%y!=y推出,当 a i % y = a j % y a_i\%y=a_j\%y ai%y=aj%y时,满足。

三十九、We Were Both Children

We Were Both Children
求出 1 → n 1\rightarrow n 1n所有数的正约数集合,分别将所有跳跃距离符合 i i i的正约数条件的青蛙数量加起来。

四十、Rudolf and Snowflakes (simple version)

Rudolf and Snowflakes (simple version)

思路

由题意可知,顶点数最少为 1 + k + k ∗ k 1+k+k*k 1+k+kk个,且 k > 1 k>1 k>1,每次顶点数增加 k ∗ k ∗ … … ∗ k k*k*……*k kk……k个,只要其中存在加和为 n n n的情况,就是 y e s yes yes

四十一、Make it Alternating

Make it Alternating

思路

操作序列的数量就是每次删除的种数 C l e n i l e n i − 1 C_{len_i}^{len_i-1} Clenileni1乘上全部删除数的全排列 ! s u m !sum !sum(因为不同删除顺序,形成的操作序列也不同) 。

四十二、Divide and Equalize

Divide and Equalize

思路

由题可知, a i x ∗ a j ∗ x = a i ∗ a j \frac{a_i}{x}*a_j*x=a_i*a_j xaiajx=aiaj,也就是无论怎么变换,数组乘积不变,为 t o t tot tot,且最终数组所有元素相同且为整数,所以 t o t tot tot n n n方一定要是整数,可以考虑用唯一分解定理对 t o t tot tot分解质因数,但 t o t tot tot过大,所以单独对每个 a i a_i ai分解,并将对应底数的幂次加和,最后看每个底数的幂次是不是 n n n的倍数即可。

四十三、Game with Multiset

Game with Multiset

思路

2 i = 2 i − 1 + 2 i − 1 2^i=2^{i-1}+2^{i-1} 2i=2i1+2i1。以二进制的方式看待 w w w

四十四、Strongly Composite

Strongly Composite

思路

强合数 至少由两个相同的素数组成,或者三个不同的素数组成,对每个 a a a分解质因数,统计成对的素数对数以及不同的素数个数。

四十五、Negatives and Positives

Negatives and Positives

思路

四十六、Save the Magazines

Save the Magazines

思路

动态规划

  • n个箱子拯救的杂志的最大数量,可以从n-1个箱子拯救的杂志的最大数量转移过来
  • 未来选择移动盖子的操作只与当前状态有关,与过去的状态没有关系。
  • 定义状态数组 d p [ i ] [ 0 / 1 ] dp[i][0/1] dp[i][0/1],表示当前是第 i i i个位置,且当前位置有无盖。
  • 状态转移方程:
    (1)当当前位置有盖子时:
    可以选择把盖子给 i − 1 i-1 i1或者不给,对应两个状态转移:
  • 不给的 d p [ i ] [ 1 ] = m a x ( d p [ i − 1 ] [ 0 ] , d p [ i − 1 ] [ 1 ] ) + a [ i ] dp[i][1]=max(dp[i-1][0],dp[i-1][1])+a[i] dp[i][1]=max(dp[i1][0],dp[i1][1])+a[i]
  • 给的 d p [ i ] [ 0 ] = d p [ i − 1 ] [ 0 ] + a [ i − 1 ] dp[i][0]=dp[i-1][0]+a[i-1] dp[i][0]=dp[i1][0]+a[i1]
    (2)当前位置没有盖子时:
    d p [ i ] [ 0 ] = d p [ i ] [ 1 ] = m a x ( d p [ i − 1 ] [ 1 ] , d p [ i − 1 ] [ 0 ] ) dp[i][0]=dp[i][1]=max(dp[i-1][1],dp[i-1][0]) dp[i][0]=dp[i][1]=max(dp[i1][1],dp[i1][0])

四十七、Yet Another Problem About Pairs Satisfying an Inequality

Yet Another Problem About Pairs Satisfying an Inequality

思路

a i < i < a j < j a_i<i<a_j<j ai<i<aj<j等价于在合法的 a j a_j aj a i < i a_i<i ai<i,然后小小的求一个前缀和(每一个合法 a j a_j aj前的 a i < i a_i<i ai<i的数量)即可。

四十八、3SUM Closure

3SUM Closure

思路

一开始的思路错了,以为是证明存在性问题,但其实是任意一组都要可以等于数组中的一个存在的数。所以就直接思考极限情况,如果数组中由两个及以上的整数,那么两个或三个最大的正数加起来,数组中一定不可能存在,负数同理。
所以有以下几种成立的情况:

  • 一个正数,其他全为0
  • 一个负数,其他全为0
  • 一正一负且互为相反数,其他全为0
  • 全为0

四十九、Directional Increase

Directional Increase

思路

  • 前缀和与差分的应用。
    对于每一个段,都是从起点走到终点,然后原路返回,在起点处加一,在终点处减一,形成了明显差分结构,根据差分前缀和性质,差分前缀和的最后一个元素 b n b_n bn必须为0,并且每一个 b i b_i bi都必须大于 0 0 0,一旦有一个零,代表从这个位置原路返回,后面的都不会再走了,所以后面的必须全部为差分前缀和数组元素全为 0 0 0

五十、Good Subarrays (Easy Version)

Good Subarrays (Easy Version)

思路

枚举右端点 r r r,考虑这个端点能作为几个区间的右端点。

五十一、Madoka and Formal Statement

Madoka and Formal Statement

思路

a i a_i ai最大变成 b i + 1 + 1 b_{i+1}+1 bi+1+1,所以对应的 b i ≤ b i + 1 + 1 b_i\leq b_{i+1}+1 bibi+1+1才是合法的,并且 a i ≤ b i a_i\leq b_i aibi合法,其他情况均不合法。

五十二、Make it Increasing

Make it Increasing

思路

要想使操作次数最少,其中有一个点为 0 0 0,然后从这个 0 0 0的位置开始,向两侧拓展。
这里用到了一个技巧:

  • 假如 b i − 1 b_{i-1} bi1位置的数为 k ∗ a i − 1 k*a_{i-1} kai1,那么 b i = ( k ∗ a [ i − 1 ] / a [ i ] + 1 ) ∗ a [ i ] b_i=(k*a[i-1]/a[i]+1)*a[i] bi=(ka[i1]/a[i]+1)a[i],分析一下: ( k ∗ a [ i − 1 ] / a [ i ] + 1 ) (k*a[i-1]/a[i]+1) (ka[i1]/a[i]+1)就是至少是 a i a_i ai的这么多倍才能大于 k ∗ a [ i − 1 ] k*a[i-1] ka[i1],才合法,免去了逐个加的过程,如果逐个加 a i a_i ai会超时。

五十三、Party

Party

思路

要保证朋友对数为偶数个,当对数为偶数个时,所有的人都可以被邀请。当朋友对数为奇数个时,需要删除某些人,使得朋友对数变成偶数个。并使得删除的人的总价值最小。

  • 删除的人只为1个或2个即可满足题意,当某个人的朋友对数为奇数时,可以删除,当两个互为朋友的人的朋友对数为偶数时,删除这两个人,也可使删除的朋友对数为奇数。
  • 因为:设 a 1 a_1 a1的朋友对数为 2 2 2 a 2 a_2 a2的朋友对数为 4 4 4,删除两人后删除的对数应为 2 + 4 − 1 2+4-1 2+41(这里减一是因为多删除了一次共同的边)。

五十四、Make a Power of Two

Make a Power of Two

思路

预处理处所有2的幂次,以字符串形式存储,挨个求取给定的 n n n和每一个幂次字符串的最长公共序列。

五十五、Getting Zero

Getting Zero

思路

思考位运算。
因为 32768 32768 32768 2 1 5 2^15 215,所以每一个数最多乘 15 15 15 2 2 2,就可以变成32768的倍数。

五十六、Maximal AND

Maximal AND

思路

与运算全一才为一,所以尽量让高位有 n n n个一才能使得最后的与和最大。

五十七、Not Sitting

Not Sitting

思路

Rahul的最优选择一定是选择中间的位置,Tina就选离Rahul最远的位置,这个题不需要考虑每一次涂座位的过程,只需要每次枚举Rahul的一个位置,求取两者的距离的最大值即可。

五十八、Longest Strike

Longest Strike

思路

可以将数组中出现次数大于等于k次的数都单独拿出来,然后排序,因为 x x x的取值是 [ l , r ] [l,r] [l,r]连续的,也就是说,要求去最长的连续区间的两个端点(连续指的后一个数严格比前一个数大一)。

五十九、And It’s Non-Zero

And It’s Non-Zero

思路

因为 1 & 0 = 0 , 0 & 0 = 0 1\&0=0,0\&0=0 1&0=0,0&0=0,所以要想使得最终的数组每一个元素的按位与结果非零,那么最终数组所有元素至少有一个相同的二进制位上面都为1。要求尽量少的删除元素,那么就记录每一个二进制位 1 1 1的数量,某一位上面的 1 1 1越多,表示 0 0 0越少,也就代表删除的数越少,所以问题就转化成了求 1 1 1数量最多的那一位的 1 1 1的数量。

  • 用bitset和前缀和的方式预处理 [ 1 , 200000 ] [1,200000] [1,200000]范围会简化时间复杂度

六十、Inversion Graph

Inversion Graph

思路

用单调栈维护区间最大值即可,因为某一个位置的数只有大于当前区间的最大值,才可能形成新的连通分量。若值小于栈顶元素,就记录第一个栈顶元素,然后不断弹出栈顶元素,直到栈顶元素小于该值或栈空,然后再将记录的栈顶元素压入栈,最后输出栈的大小即可。

  • 手画以下即可理解过程。

六十一、Array Elimination

Array Elimination

思路

记录下各个二进制位的 1 1 1的数量,求取他们的最大公约数即可。然后再求出这个最大公约数的所有约数输出。注意全为0或者有任意一个或多个元素为0的情况。

六十二、Game of Ball Passing

Game of Ball Passing

思路

传球的情况与传球次数最多的那个人有关,传球次数比他少的,都可以经过传递将传球次数逐渐变成0,但是如果传球次数最多的,比所有其他的人传球次数加起来都多,那么在一个球的情况下这个人一定会剩下几次没传完,那就只能加球了,但是其他的所有人,传球次数都没有了,这个时候就只能传给任意的人,然后那个人将球丢掉不传递。。这个时候额外需要的球的数量就是 2 ∗ m a x n − s u m 2*maxn-sum 2maxnsum

六十三、Paprika and Permutation

Paprika and Permutation

思路

  • 这里给出一个结论,一个整数除以比他小的数,最终的余数的范围一定在 [ 0 , a i − 1 2 ] [0,\frac{a_i-1}{2}] [0,2ai1]之间,也就是说当某一个位置的元素 b i > 2 ∗ i b_i>2*i bi>2i时,它才有可能经过取模变成 i i i
  • 原本就是排列一部分的就不用再变动了,将不是的记录在数组中,排序,然后根据上面的结论求取。

六十四、White-Black Balanced Subtrees

White-Black Balanced Subtrees

思路

简单的树形dp题目

  • 技巧,可以将黑色记为-1,白色记为1,最终记录,每一个子树根节点的值为0 的数量即可。

六十五、Jatayu’s Balanced Bracket Sequence

Jatayu’s Balanced Bracket Sequence

思路

由题,整个 s s s是平衡括号序列,也就是说,每一个(必定对应着一个)形成一个平衡括号序列(也就是形成一个连通分量),所以最初联通分量的数目有 n n n个,注意到当出现一个)(结构的时候,两个连通分量合并成一个,证明如下。

  • 由题可知,一个)必定对应一个(形成一个平衡括号序列,同理,一个(也必定对应一个)。而两个相邻的平衡括号序列必定能形成一个更大的平衡括号序列,这是一定的,故得证。
  • 30
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值