周赛 Round#3 题解

又不能放图片,又不能写学校,你让我怎么办啊!!

系列文章目录

1.周赛 Round#1
2.周赛 Round#2

前言

这是周赛第三轮。//涉及隐私原因,博文里不放题目,要看的去http://0241:101:610:801.22222

划分字符串贪心&动态规划
组合线段递推
美味沙拉
最大化运算式
汤姆猫与台球
小组长

T1 划分字符串 parse

本题考查:贪心&动态规划
通过简单地分析易得出结论:最优解一定只含1或2长度的字串,所以最好理解的方法就是贪心,首先默认长度是1,再通过与前一个的比较判断是否需要i++;只用两个字符串就行。

T2 组合线段 segment

这道题真的是水上加水,真不知道那些没A的怎么想的!!
——某BCS同学

因为线段不能动,所以直接算出某一纵轴上的线段,取最大值不就完了吗!!我还去厕所打了下草稿(这是真的别不信)。
题解上的递推式太复杂了,虽然可以O(1),但此题时间限制居然2000ms,硬是给我看蒙了,我还以为本题不是递推。
我找到了一个规律:
从3开始,i=2,每次a[i] = a[i-1] + i; 而每隔两次计算i++;简单一个O(n)循环就能实现。
说实话,评讲的时候方法太多了,我们来一个个的列举下。

1

就是上文说的方法,也是我考试时想到的,核心代码:

for(int i = 3; i <= n; i++){
		s+=j;
		if(i % 2 ==0) j++;
	}
cout << s;

2

与第一种方法本质是一样的,只不过推理方法不同:
算出某一纵轴上的线段,取最大值:

3

在2的方法下更进一步,用一个表格可以来表示2的轴上长度为几的线段格出现了几次,通过表格我们也可以得到规律从而地推完成。
在这里插入图片描述

4

其实3可以算作是一个等差数列的递推,我们再把单数和双数合并下就变成经典的两行代码那不是更好吗,利用单数和双数%2的性质,再利用c++/2只取整的“漏洞”即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来自八中的小鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值