Codeforces Round #651 (Div. 2)

Codeforces Round #651 (Div. 2)

A. Maximum GCD

题意: 给定n,找到1 < a < b <= n,使得gcd(a, b)最大

题解: 思维+数学。分析可知,找到的a和b,必然成倍数关系,b = t * a,那么 res = gcd(a, b) = a。就是找到一个数字是另外一个的倍数。那么最大的就是 ⌊ n / 2 ⌋ \lfloor n / 2\rfloor n/2,因为t取2能够使得a最大

代码:

B. GCD Compression

题意: 给你2n个数字,从中选择2 * (n-1)个数字,然后两两组成一对,记每一对的何为bi,要求使得这n-1对的gcd大于1.

题解: 思维+构造。gcd大于1,那么只需要全部为偶数即可,那么我们就把奇数和偶数分别拆分出来,然后拿的时候要不然2个都偶数,要不然2个都为奇数,这样就能够使得b全为偶数。那我们先从偶数开始拿,能拿就拿,如果最后偶数剩下一个,那么最后奇数也会剩下一个,刚好一起扔掉;如果偶数不剩下,那么奇数最后2个扔掉就行。

代码:

C. Number Game

题意: 给定n,每次操作可以进行如下:

  1. 将n除以奇数因子
  2. n–

操作要保证n>1才能进行,不能进行操作的输

题解: 博弈。考虑分为奇数偶数。如果n为奇数,那么我直接除以自己,然后就赢了,因此拿到n为奇数的局面为赢。如果n为偶数,那么我是可以将偶数转换为奇数,或者不能转换的。将n分解为 n = 2 t ∗ a ∗ b . . . n = 2^t * a * b... n=2tab...,那么如果a*b不存在,就是能转换,要不然就是不能转换。如果能够转换,那么我就变为 2 t ∗ a 2 ^ t * a 2ta给对面。

代码:

D. Odd-Even Subsequence

题意: 给定一个长度为n的字符串s,要求从s中找到一个长度为k的子序列,要求子序列的奇数位的最大值或者偶数位的最大值最小。

题解: 二分+思维。如果不说奇数位偶数位,那么我直接二次答案,然后check的时候,如果小于等于mid就选,这样贪心选择k个即可。现在要求奇数位和偶数位的最大值最小,那么check的时候分开奇数位和偶数位check。只需要奇数位满足或者偶数位满足即可。

代码:

E. Binary Subsequence Rotation

题意: 给定一个是字符串s和一个字符串t,每次操作可以选择s中的随机个子序列,然后将其循环右移,问最小多少次操作可以使得s变为t。

题解: 思维+贪心。分析可以知道s选择出来的子序列为010101,或则101010,且长度为偶数。因为如果不是这样的结构,比如011,那么循环移位后为101,最后一个1其实没有移动过,没有意义,同理其他00连续或者11连续也是一样。然后如果不是偶数,那么比如010,循环后为001,也会出现无效位。所有证明只能01交错且长度为偶数。

贪心考虑这个问题,那么我从前往后扫描,如果返现s[i] != t[i],我就需要判断这个字符该怎么处理,我就维护许多的分组,每个分组尽可能形成0101,或则1010。这样维护了多少个分组就是需要移动多少次。

代码:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值