ACM训练日记7.6

一、各题题意

  1. A. Three Friends
    在x轴上有三个点,对每个点只能操作一次,可执行操作:左移一个单位,右移一个单位,或者不动。求操作之后,两两之间距离的最小距离和。

  2. B.Snow Walking Robot
    四个字符表示四种移动方向,需要从(0,0)点出发又回到(0,0),问尽量少的删去字符串中的一些字母并重新排列剩下的字母后能否使其从(0, 0)运动至(0, 0),除起点外其余点仅能访问一次,输出最大移动次数,并输出最大移动字符串。

  3. Yet Another Broken Keyboard
    给定一个字符串,和k个字符,问在字符串中有多少子串是给定的k个字符中的字符组成的。(长度为k的字符串子串有k*(k+1)/2)

  4. D. Remove One Element
    给定一串数字,最多可以从这串数字中删除1个数字(也可以不删),问删除后最长的严格单调递增连续子串多长

  5. E. Nearest Opposite Parity
    对于每个位置的数i,如果i-a[i]>=1,那么跳到下表为i-a[i]的位置,如果i+a[i]<=n,那么跳到下标为i+a[i]的位置;求出对于每个位置的数,进行着两种操作的最小的次数到达与当前数奇偶性相反的数,如果不能达到输出-1。

  6. F. Two Bracket Sequences
    给定两个只包含左右括号的序列 a 和 b,求最短的规则序列 s ,使得 a 和 b 都是 s 的子序列,输出这个字符串s。

二、各题AC(补题)过程

我AC了三道题,但是感觉这三道题都挺水的…没有涉及到任何的算法知识,只是简单的小思维题。简单的说一下思路:

  1. A. Three Friends
    最水的一道题目,看完题目就能出思路,找出最大值和最小值分别左移和右移就可以。

  2. B.Snow Walking Robot
    读完题之后就很自然的想到,当l=r u=d时才能回到原点,所以要先统计l,r,u,d的个数,然后找出l r,u d中较小的数,计算就好了。还有一种特殊情况,仅仅上下或者左右移动时,只要两步就ok。

  3. Yet Another Broken Keyboard
    也比较简单,主要就是考察一个字符串的子串有多少个,题目都给了公式了,坏的键会分割出来的各个好的串,然后做法就是题目一开始说的在好的串里挑选字串的公式 l*(l+1)/2

下面的题目就都是没做出来的了:

  1. D. Remove One Element
    这道题是用dp做的,思路实现:
    dp【i】【0】: 代表以a[i]结尾的字串没有删除任何元素的最大长度。
    dp【i】【1】:代表以a[i]结尾的字串删除了一个元素的最大长度。
    若当前的a【i】 > a【i-1】那么可以更新2种状态
    (1) dp[i][0] = max(dp[i][0], dp[i - 1][0] + 1); 代表当前没有选择删除元素,那么只能由上一个没有选择删除元素的状态转移。
    (2) dp[i][1] = max(dp[i][1], dp[i - 1][1] + 1); , 代表当前选择了删除元素,那么由上一状态已经删除了的转移过来。
    若a【i】 > a【i-2】 那么可以选择是否删除a【i-1】这个元素
    dp[i][1] = max(dp[i][1], dp[i - 2][0] + 1); 这个状态就由dp【i-2】【0】 之前没有删除过元素的状态转移过来。

后边这俩题,看题解都看的一脸懵…尽量去理解思路

  1. E. Nearest Opposite Parity
    这个去CSDN去查,发现用了啥超级源点、反向建边,然后去详细了解了一下。
    具体思路:
    对于每个位置的数跑最短路,每个位置的数一次最多到达两个点,那么就相当于给图上的点连边,然后就是求以这个点为起点到达与这个点奇偶性相反的点的最短距离,dp[i][0]代表下表为i的数到达奇数的最短距离,dp[i][1]代表到达偶数的最短距离,那么反向建图,反向建图就是能求这个点能到达的点往自己的最短路。

  2. F. Two Bracket Sequences
    用了从未尝试过的三位dp和dfs,比较新颖。
    dp[i][j][k]表示第一个串到第i个位置,第二个串到第j个位置时,左括号比右括号多k个的最少长度。
    每次新增一个位置的时候只有两种情况,判断一下是否出现过。用一个pre数组记录每个情况新增的括号是什么,和从那里转移过来的即可。并且注意左右括号之间的差不会超过200

三、训练总结

这6道题比赛的时候都看了,每个题都试着做了做,最终只出来了三道最简单的,b题是一道dp的题目,比赛的时候想到用dp做了,但我对dp都快有恐惧感了,一点做这道题的信心都没有,看到dp就想把这个题目放了。剩下的两个题,都没啥思路就都放了。
有一段时间没打比赛就感觉手生了不少,出题速度变慢了,还还出了一个小错误没检查出来,导致罚时了…所以下午就又找了几道题做了一下,找找手感。又看了看树的部分,了解了树的基本概念和二叉树。
状态不是太好,明天加油!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值