训练日记7.8

一、训练赛

  1. A.Payment Without Change (AC)(水题)
    题意:
    给出4个数,分别是a,b,n,s 。如果能用x,y去构造成xn+y1=s这个式子,就打印“YES”,否则就打印“NO”

  2. B.Minimize the Permutation(AC)
    题意:
    给1到n得一个全排列,可以至多进行n-1次交换操作,
    两种操作:
    1.只能相邻位置交换
    2.每个两个位置之间只能交换一次
    问在n-1次操作内能得出得字典序最小得序列。
    思路:
    对于给定的几个数字, 如果让他们任意组合的结果最小, 那一定是从小到大依次排列.因此思路就有了, 我们要让靠前位置的数字尽可能的小, 即我们希望小数字在前.
    倒着看整个序列, 把后一个数字比前一个数字大的排序进行交换, 这样最小的数字就可以被我们交换到首位(但是次小的数字并不一定在次位).
    交换后或许还会有某些位置的交换次数没有用, 这时就要运用到贪心的思想, 看看交换后是否能让结果更小.

  3. C. Platforms Jumping
    题意:
    就是给你一个整数n代表这个河流的宽度,m代表你有几个木板子可以使用,d代表你一次能跳的最远距离;
    这里主要就是给你的木板子必须使用完。
    思路:
    贪心。
    判断如果当前位置+跳的距离d+剩下板子的长度>=n+1,就表示把剩下的板子全部无缝连在一起,再跳小于等于d的距离就可以过水沟了。
    如果不能,就表示不只需要跳d,还需要多次跳跃,那么就把一块板子的起点放在当前位置,更新当前位置到板子的末端,重新再判断
    如果可以,那就表示只要跳x的距离再把后面所有的板子无缝连接就可以过了,那就找到x的大小,更新当前位置(就是+x,表示跳x距离),此时的当前距离就是把剩下板子无缝连接成的大板子的起点。
    如果把所有板子都用完都过不去,那么输出NO

  4. D. Binary String Minimizing(AC)
    题意:
    给出两个数n和m,第一个数代表0和1组成的序列长度,对这个序列进行变换,即将0移到序列的最前端,第二个数代表移动步数,求移动m次后序列变成什么样子。
    思路:
    贪心思想,比较好出思路,首先找到0的位置,与第一个1进行交换,如果0和1的距离小于剩余移动步数则与能向前移动的最大步数的1进行交换.。

  5. E.Yet Another Division Into Teams
    题意:
    n个数,分成若干组(每个组至少3个数),每个队伍都有最大最小值的差值,如何才能使所有队伍的最大最小差值之和最小。
    思路:
    首先当然是尽量让能力相近的人分到一组,先排个序,显然同一组的人一定是排序后连续的一堆人。然后dp。
    dp[i]表示前i的最小答案,转移分两种情况
    (1)直接加入i-1这个人的组,dp[i]=dp[i-1]+a[i]-a[i-1]
    (2)从新开一个组,那么从4到i-2遍历,dp[i]=min(dp[j-1]+a[i]-a[j])
    对于第一种状态直接转移,第二种状态记录一个最小值就可以O(1)转移了。然后再记录一下dp路径来分组就可以了。

  6. F. Equalizing Two Strings
    题意:
    给两个长度为n的字符串s和t
    每次操作你可以指定一个长度len,然后在s和t中分别选择一个长度为len的子串,将这两个子串翻转
    你可以进行无数次操作,问最后是否能使得两个串相同.
    思路:
    如果s串和t串中字母种类和数量的组成不同,则无解
    考虑种类和数量相同的情况:
    长度为len的子串翻转可以拆分为若干次长度为2的子串翻转,如果s串或者t串中存在两个相同字符,那么可以先将相同字符移动到一起,然后固定这两个相同字符不断交换,串不变,那么另外一个串可以随意变化,这时候一定有解,否则说明两个串中每种字母只出现了一次,是一一对应的关系
    可以将两个串看成两个排列,接下来的问题是判断翻转操作能否使得排列相同
    因为len为2的翻转操作就是交换相邻字符,不妨假设现在通过翻转使得字符串升序,交换相邻使得排列升序的最小次数为逆序对数量,那么如果两个串的逆序对奇偶性相同则有解,否则无解,因为一个串到达升序之后,在进行两次原地交换,另外一个串就能多两次交换
    所以奇偶性相同就一定有解

二、赛后总结

感觉今天的比赛是掉到 贪心 的窝里了…,大部分题目都用到了贪心思想来解决。今天算是直观的感受到cdx有多强了,和他的差距真大,自己就是个小弱鸡。今天总体情况还好,但是犯了一个致命的错误,没清空数组内的内容,这就导致下一次循环储存的数据出现了错误,罚时了一次…人生中第一次在比赛时做出来cf的D题,当时比赛时候还以为是B题呢…今天又有一道dp的题目,然后今天就着重看了看一直最头疼的dp,做了几道题,也感觉没有那么难了,心态上发生了一些改变。
革命尚未成功,同志仍需努力!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值