终 - 验收

week9 - 东东学打牌

模拟题。主要注意每次牌型写完测试,不要漏掉情况。

首先将读入进来的手牌进行处理,A10JQK分别映射到数字上,然后进行每张牌排序,方便之后能够列举情况进行判断。每张牌大小排序完成之后进行一手牌判断,即判断是否属于某一种牌型。因为已经对每张牌进行了排序,所以可以直接对于按照一手牌优先级的顺序对某种牌型进行if判断,如果是,那么一手牌的最高就是当前情况,否则降级判断加一个一手牌进行判断。

最后判断完成之后,存在每一个人的结构体中,进行重载之后的排序,按照一手牌的大小进行输出即可。

week10 LIS&LCS

LIS是最长上升子序列,LCS是最长公共子序列。

求解LIS时, d p [ i ] dp[i] dp[i]表示在结尾是 a [ i ] a[i] a[i]的最长答案,所以 d p [ i ] = m a x ( d p [ i ] , d p [ j ] + 1 ) dp[i] = max(dp[i], dp[j] + 1) dp[i]=max(dp[i],dp[j]+1),条件是当 a [ i ] > a [ j ] a[i] > a[j] a[i]>a[j]的时候更新,保证有序。

求解LCS时,用 d p [ i ] [ j ] dp[i][j] dp[i][j]来表示 a a a序列末尾在 i i i之前, b b b序列在 j j j之前的最优答案,转移情况分为两种,当 a [ i ] = b [ i ] a[i] = b[i] a[i]=b[i]的时候, d p [ i ] [ j ] = d p [ i − 1 ] [ j − 1 ] + 1 dp[i][j]=dp[i-1][j-1]+1 dp[i][j]=dp[i1][j1]+1,就相当于加上了当前相等的这个元素;当 a [ i ] ≠ b [ i ] a[i] \neq b[i] a[i]=b[i]的时候,不能加加一,需要从之前的状态取最大值,所以 d p [ i ] [ j ] = m a x ( d p [ i − 1 ] [ j ] , d p [ i ] [ j − 1 ] ) dp[i][j] = max(dp[i-1][j], dp[i][j-1]) dp[i][j]=max(dp[i1][j],dp[i][j1])

week10实验 团队聚会

本题是模拟题。

先处理读入的字符串,将所有时间转化为从1800.1.1开始经过的秒数,方便后序的比较。将每一件事都分成两个部分:开始事件和结束事件,分别存在结构体中。

将结构体进行排序,按照时间大小。这样我们就获得了一个从前到后的时间线。

对时间线进行遍历,每次遇到一个事件先判断是开始事件开始结束事件,如果是开始,那么就让开始的人变为忙碌状态,如果是结束,那么就释放某些人。然后每次都检查一下人数是否符合要求,进行记录。

最后再把满足要求的时间秒数转化为题目要求的输出格式即可,记得补充前导零。

week14实验 猫睡觉

本题的关键是对于跨夜番剧的处理,这里的处理方法是找到第一个出现番剧的时间,记录一个offset,把这个时间当做一天的开始,这样所有番剧就是在一天之内的了。

将所有的时间换成从开始时间记录的秒数,统一时间格式。

因为输入不保证有序,所以对番剧按照开始时间进行排序。

在最后增加一个终止时间,即为第一个事件在第二天的时间,即加上一个周期1440。

然后对整个时间进行一个遍历,如果能睡觉就睡觉,尽量减少工作的时间,如果遇到番的长度大于工作时间,直接输出NO,否则将所有睡眠情况(满足A)记录下来,然后判断睡眠的间隔即工作时间(满足B)如果不符合条件那么NO,否则输出睡眠记录即可。

week11-15中如果有做选做题,每周任挑一道
Week12 选做题1 区间 dp 判断括号:给出一个括号串,求最长的合法的子序列的长度。

设置 d p [ i ] [ j ] dp[i][j] dp[i][j]代表区间 [ i , j ] [i,j] [i,j]内最多的合法括号数,长度都需要从自己内部已有的长度扩展而来。

s [ i ] s[i] s[i] s [ j ] s[j] s[j]满足条件的时候,那么 d p [ i ] [ j ] = d p [ i + 1 ] [ j − 1 ] + 2 dp[i][j] = dp[i + 1][j - 1] + 2 dp[i][j]=dp[i+1][j1]+2;

然后又因为,最大长度可能从这个区间内任何一个点组合而来,所以字节直接把整个区间的中继节点都遍历了,即为k,取一遍最大值:$ dp[i][j] = max(dp[i][j], dp[i][k] + dp[k + 1][j])$。

最后的 d p [ 0 ] [ l e n − 1 ] dp[0][len-1] dp[0][len1]即为最终答案。

月模拟的路径解析

首先需要共同处理的字符串是路径中出现无意义 ′ . ′ '.' . ′ / ′ '/' /

如果当前读入的路径不以 ′ / ′ '/' /开头那么是相对路径,需要加上当前目录。

然后进行分割字符串:如果分割出来是空跳过,如果是…那么需要返回上一级,即栈结构退回一个,否则推入末尾。

处理完之后如果是空,那么那么是根目录,特判一下。最后按照存下来的目录添加 ′ / ′ '/' /输出即可。

炉石传说

用vector记录其拥有的随从,每当读取到命令,如果需要随从变化,来进行随从编号的维护。

  1. 对于召唤随从操作,即当做vector的插入操作即可。
  2. 对于随从攻击,需要考虑的是掉血之后随从的死亡情况。
  3. 如果被攻击方是英雄,那么英雄可能死亡,如果死亡那么攻击方就是赢家。
  4. 结束end判断即可。
元素选择器

用结构体存储标签、id、层级、父亲,记得要转化大小写,标签全小写,id区分大小写。

对于三种元素选择器:

  1. 标签、id选择器:对数组进行遍历。

  2. 后代选择器:
    首先遍历一遍元素,找出所有最后一个标签符合的元素,推入vector,这时记录当前处理的层级。然后对vector中的元素进行处理,找到符合倒数第二个标签的,以此类推,当前要维护当前处理的层级。

CSP-M3-T4 咕咕东学英语

对于这个题我们发现不合法的情况更好求,所以采取总数-不合法=合法的做法。

因为只有2种字符,所以我们可以发现A…AB、BA…A、B…BA、AB…B不符合条件。所以我们进行字符串便利,正反各一遍,然后再加上重复计算的部分,最后用总数减结果,输出即可。

CSP-M4-T4

考虑这棵树的子结构,因为是有序的,所以位置 i i i之前的是 i i i的左子树,之后的是右子树。

用区间dp构建可行二叉搜索树, d p [ i ] [ j ] dp[i][j] dp[i][j]代表区间 [ i , j ] [i,j] [i,j]是否构造这么一颗二叉搜索树。 l [ i ] [ j ] l[i][j ] l[i][j]表示以第 j j j 个数为根,从第 i i i 个数到第$ j 个 数 是 否 可 以 构 成 一 棵 二 叉 搜 索 树 。 个数是否可以构成一棵二叉搜索树。 r[i][j] 示 以 第 示以第 i$ 个数为根,从第 i i i 个数到第 $j $ 个数是否可以构成一棵二叉搜索树。

状态转移: i f ( g c d ( a [ i ] , a [ j ] ) > 1 ) d p [ i ] [ j ] = d p [ j ] [ i ] = 1 ; if (gcd(a[i],a[j])>1) dp[i][j] = dp[j][i] = 1; if(gcd(a[i],a[j])>1)dp[i][j]=dp[j][i]=1;

当$l[i][k] && r[k][j] $时,

if (dp[i - 1][k]) r[i - 1][j] = 1;

if (f[k][j + 1]) l[i][j + 1] = 1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值