CF1992场题解
Only Pluses
算法:数学。
题意简述:有三个数,每次选择一个数 \(x\),使得 \(x\) 增加一,至多操作 \(5\) 次,最后求出这三个数的乘积最大值。
简单题,一眼秒了。考虑把这 \(3\) 个数从小到大排序,显然加最小的数比加其他的数更优。
简单证一下:设排序后的三个数为 \(a,b,c\),有 \(b\times c\ge a\times b\) 且 \(b\times c\ge a\times c\),而 \(b\times c\) 就是把最小数 \(a\) 加一增加的贡献,故改变最小数一定更优。
Angry Monk
算法:数学。
题意简述:有两种操作,把一个大于 \(1\) 的数 \(x\) 拆成 \(x-1\) 和 \(1\);或者把 \(1\) 和另一个数 \(x\) 合并成 \(x+1\),问把原序列合成一个数最少需要几次操作。
简单题,同样一眼秒了。考虑最大的数不要拆,把剩下的数都拆成 \(a_i\) 个 \(1\),最后把每个 \(1\) 和最大数 \(a_1\) 合并。
这里把一个数 \(x\) 拆开需要 \(x-1\) 次操作,合并需要 \(x\) 次操作,总共需要 \(x\times 2-1\) 次操作,所以我们应该按这个数排序,最大操作次数的不动。事实上,就是最大数不动。
Gorilla and Permutation
算法:贪心,构造。
题意简述:定义两个数组 \(f_i\) 和 \(g_i\),构造出的数组为 \(a_i\),给定 \(m,k\)。\(f_i\) 的转移:\(f_i=f_{i-1}+(a_i \ge k?a_i:0)\);\(g_i\) 的转移:\(g_i=g_{i-1}+(a_i \le m?a_i:0)\),最后求序列 \(a\) 使得 \(\displaystyle \sum_{i=1}^{n}(f_i-g_i)\) 取到最大值。
仔细想一想就可以发现,我们要让 \(f\) 尽可能大,\(g\) 尽可能小,所以根据 \(f\) 的定义,我们把当前最大的且能对 \(f\) 造成贡献的放在前面,剩下不能造成贡献的就从小到大放在上文提到那些数的后面,具体证明可以使用调整法,这里不再进行证明。
Test of Love
算法:贪心。
题意简述:有一个长为 \(n\) 的数组,初始在坐标为 \(0\) 的原木(原文中是岸边,但是两者等价,所以下文把岸边称为原木),要走到坐标 \(n+1\) 的原木上。数组中可能有原木,水,鳄鱼三个东西,鳄鱼所在位置不能到达,水的位置的到达次数不能超过 \(k\),每次在原木上可以向后跳跃 \([1,m]\) 格,在水上只能向后移动 \(1\) 格,问能不能到达 \(n+1\) 位置上的原木。
考虑贪心,如果当前在原木上,所在位置能向后到达一个原木,那我们选择最远的原木到达;否则,选择最远的水到达。如果在水上,直接向后即可。在每次出发前判断一下是不是处在鳄鱼格或者经过的水的数量超过限制即可。
每次选择最远的东西过去正确性显然,而优先选择原木是因为,原木一定能比水优,原因是原木可以向后很多,最右边的位置一定比现在最右边的位置远,而水只能向后 \(1\) 格,故原木一定更优。
Novice's Mistake
算法:数学。
题意简述:给出一个数字 \(n\),记 \(s\) 为把 \(n\) 转换为字符串后再把自己重复写 \(a\) 次后删掉最后 \(b\) 个字符(长度不足则删空,数字表示为 \(0\))所表示的数。求出有多少对 \((a,b)\) 满足 \(a\times n-b=s\)。例如字符串 923 表示数 \(923\)。
我们发现 \(n\) 非常小,不超过 \(100\),而 \(a,b\) 也不超过 \(10^4\),故最后的 \(s\) 不超过 \(10^6\)。
这里设 \(len\) 为字符串表示下的 \(n\) 的长度。
所以我们枚举 \(a\) 和最后字符串的长度 \(c\),这里简单推一下可以发现 \(b=a\times len-c\)。然后进行判断,看这样一组 \((a,b)\) 是否满足题意,如果满足加进我们的答案序列中即可。
Valuable Cards
算法:数据结构,数学。
题意简述:给一个序列,序列中没有数 \(x\),现在要求把序列划分成任意成连续段,使得每一段中不存在若干个数相乘的结果为 \(x\)。问最少划分成多少段。
我们考虑使用 set 维护当前如果出现值 \(k\),使得如果后续出现一个数 \(k\) 就能凑出来 \(x\)。
具体维护方式为:我们判断每一个数 \(k\) 是否为 \(x\) 的因数,如果不是跳过即可。否则我们把 \(\dfrac{x}{k}\) 存进去,如果发现出现重复,则把 set 清空,再进行上述操作。而当遇到集合中的数 \(y\) 也是 \(k\) 的倍数时,把 \(\dfrac{y}{k}\) 也存进集合即可。
Ultra-Meow
算法:数学。
题意简述:定义 \(\operatorname {MEX}(S,k)\) 为集合 \(S\) 中没有出现的正数中第 \(k\) 小的,\(|S|\) 为集合 \(S\) 的大小。现在需要求出 \(\displaystyle \sum_{a\in S} \operatorname{MEX}(a,|a|+1)\)。
一道比较正常的组合题,首先简单的想一下,可以看出可能产生的答案一定 \(\in [2,n\times 2+1]\),于是我们把它们分成两段计算。
第一段是答案 \(\in [2,n]\),我们考虑先枚举答案 \(i\),再枚举子集大小 \(j\),比较显然地,可以看出答案为 \(i\times C_{i-1}^{i-j-1}\times C_{n-i}^{j\times 2-i+1}\)。注意这里 \(j\) 的上界为 \(\min(i-1,\dfrac{n-1}{2})\),因为如果超过 \(i-1\) 个数,即使这些数都比 \(i\) 大,答案也至少是 \(i+1\);同理可得,如果超过 \(\dfrac{n-1}{2}\),也是不合法的。
上面的 \(i-j-1\) 其实是因为 \(i-j-1+j+1=i\),所以我们要让前面选这么多数,而剩下的数显然不能选 \(i\),故应该在 \([i+1,n]\) 这个区间中选择剩下的数。
第二段答案显然只有答案 \(i\) 为奇数才能产生贡献,而每一部分的贡献随意取 \(\dfrac{i}{2}\) 个即可,故贡献为 \(i\times C_{n}^{\dfrac{i}{2}}\)。
所以我们预处理组合数,分开计算这两段答案即可。
CF1992场题解的更多相关文章
- 2016多校第六场题解(hdu5793&hdu5794&hdu5795&hdu5800&hdu5802)
这场就做出一道题,怎么会有窝这么辣鸡的人呢? 1001 A Boring Question(hdu 5793) 很复杂的公式,打表找的规律,最后是m^0+m^1+...+m^n,题解直接是(m^(n+ ...
- T1 找试场 题解
拖延症又犯了QwQ. 今天上午考试了,按照惯例,我仍然要把我会的所有题的题解写一遍. 1.找试场(way.cpp/in/out) 问题描述 小王同学在坐标系的(0,0)处,但是他找不到考试的试场,于是 ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- HDU 全国多校第四场 题解
题解 A AND Minimum Spanning Tree 参考代码: #include<bits/stdc++.h> #define maxl 200010 using namespa ...
- 2019牛客暑期多校第二场题解FH
F.Partition problem 传送门 题意:有2n个人,分两组,每组n个,要求sum(vij)最大值. 题解:n并不大我们可以枚举每个人是在1组还是2组爆搜. 代码: #include &l ...
- 2019牛客暑期多校第六场题解ABDJ
A.Garbage Classification 传送门 题意:给你两个串,第一个串s由小写字母组成,第二个串t由dwh组成,长度为26,分别表示字母a到z代表的字符.现在要你判断: 如果字符串中‘h ...
- 2019牛客暑期多校第五场题解ABGH
A.digits 2 传送门 题意:给你一个n,要求输出一个每一位数字之和能整除n且其本身也能整除n的数.n不超过100,要求的数不超过10000位数. 题解:直接将n输出n次. 代码: #inclu ...
- 2019HDU多校第四场题解
1001.AND Minimum Spanning Tree 传送门:HDU6614 题意:给你一个又n个点的完全图,点编号从1~n,每条边的权值为被连接的两点编号按位与后的值.现在要你找到最小生成树 ...
- 2019牛客暑期多校第一场题解ABCEFHJ
A.Equivalent Prefixes 传送门 题意:给你两个数组,求从第一个元素开始到第p个元素 满足任意区间值最小的元素下标相同的 p的最大值. 题解:我们可以从左往右记录到i为止每个区间的最 ...
- [noi.ac省选模拟赛]第12场题解集合
题目 比赛界面. T1 数据范围明示直接\(O(n^2)\)计算,问题就在如何快速计算. 树上路径统计通常会用到差分方法.这里有两棵树,因此我们可以做"差分套差分",在 A 树上对 ...
随机推荐
- 深入了解身份认证和授权机制,看看API请求到底发生了什么?
前段时间写了一篇基于.NetCore环境使用IdentityServer4为API接口鉴权的文章,更多的是从快速上手的角度描述了IdentityServer4的使用.后续使用过程中,自己有了一些其他想 ...
- Masonry在视图相对关系处理中的各种“offset”
如果我们需要设置一个view在另一个view的右边缘距离一定距离的地方,利用Masonry这么写: [a mas_makeConstraints:^(MASConstraintMaker *make) ...
- 【BUG记录】Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xA6' for column 'name' at row 1
大家好呀,我是summo,这次的文章标题是一个Mysql数据库的SQL错误,遇到的同学自然懂,没遇到的同学希望你永远也不要遇到. 一.错误说明 Cause: java.sql.SQLException ...
- 在WPF中使用WriteableBitmap对接工业相机及常用操作
写作背景 写这篇文章主要是因为工业相机(海康.大恒等)提供的.NET开发文档和示例程序都是用WinForm项目来说明举例的,而在WPF项目中对图像的使用和处理与在WinForm项目中有很大不同.在Wi ...
- 化合物同位素理论同位素分布计算软件Isopro 3.0
大家好,今天分享一款软件,即可以计算化合物理论同位素分布的软件Isopro 3.0.在做质谱的实验时,特别对合成的化合物进行质量表征时,往往要求ppm绝对值在5以内,对质谱的分辨率要求很高.对于小分子 ...
- 3568F-Linux-RT系统测试手册
- TI AM64x工业核心板规格书(双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F,主频1GHz)
1 核心板简介 创龙科技SOM-TL64x是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核Cortex-R5F + 单核Cortex-M4F设计的多核工业级核心 ...
- [oeasy]python0041_ 转义字符_转义序列_escape_序列_sequence
转义序列 回忆上次内容 上次回顾了5bit-Baudot博多码的来历 从 莫尔斯码 到 博多码 原来 人 来 收发电报 现在 机器 来 收发电报 输入方式 从 电键 改成 键盘 输出方式 从 纸带 变 ...
- 番外篇: go语言写的简要数据同步工具
go-etl工具 作为go-etl工具的作者,想要安利一下这个小巧的数据同步工具,它在同步百万级别的数据时表现极为优异,基本能在几分钟完成数据同步. 1.它能干什么的? go-etl是一个数据同步工具 ...
- JavaScript实现防抖函数
什么是防抖?防抖就是避免快速多次点击后执行过多的函数调用,就是本来你点击支付宝支付后不小心在点击一次,导致支付函数被调用了两次,还都执行了,付了两次钱. 防抖函数的思想就是将函数延迟调用,延迟时间内不 ...