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场题解的更多相关文章

  1. 2016多校第六场题解(hdu5793&hdu5794&hdu5795&hdu5800&hdu5802)

    这场就做出一道题,怎么会有窝这么辣鸡的人呢? 1001 A Boring Question(hdu 5793) 很复杂的公式,打表找的规律,最后是m^0+m^1+...+m^n,题解直接是(m^(n+ ...

  2. T1 找试场 题解

    拖延症又犯了QwQ. 今天上午考试了,按照惯例,我仍然要把我会的所有题的题解写一遍. 1.找试场(way.cpp/in/out) 问题描述 小王同学在坐标系的(0,0)处,但是他找不到考试的试场,于是 ...

  3. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  4. HDU 全国多校第四场 题解

    题解 A AND Minimum Spanning Tree 参考代码: #include<bits/stdc++.h> #define maxl 200010 using namespa ...

  5. 2019牛客暑期多校第二场题解FH

    F.Partition problem 传送门 题意:有2n个人,分两组,每组n个,要求sum(vij)最大值. 题解:n并不大我们可以枚举每个人是在1组还是2组爆搜. 代码: #include &l ...

  6. 2019牛客暑期多校第六场题解ABDJ

    A.Garbage Classification 传送门 题意:给你两个串,第一个串s由小写字母组成,第二个串t由dwh组成,长度为26,分别表示字母a到z代表的字符.现在要你判断: 如果字符串中‘h ...

  7. 2019牛客暑期多校第五场题解ABGH

    A.digits 2 传送门 题意:给你一个n,要求输出一个每一位数字之和能整除n且其本身也能整除n的数.n不超过100,要求的数不超过10000位数. 题解:直接将n输出n次. 代码: #inclu ...

  8. 2019HDU多校第四场题解

    1001.AND Minimum Spanning Tree 传送门:HDU6614 题意:给你一个又n个点的完全图,点编号从1~n,每条边的权值为被连接的两点编号按位与后的值.现在要你找到最小生成树 ...

  9. 2019牛客暑期多校第一场题解ABCEFHJ

    A.Equivalent Prefixes 传送门 题意:给你两个数组,求从第一个元素开始到第p个元素 满足任意区间值最小的元素下标相同的 p的最大值. 题解:我们可以从左往右记录到i为止每个区间的最 ...

  10. [noi.ac省选模拟赛]第12场题解集合

    题目 比赛界面. T1 数据范围明示直接\(O(n^2)\)计算,问题就在如何快速计算. 树上路径统计通常会用到差分方法.这里有两棵树,因此我们可以做"差分套差分",在 A 树上对 ...

随机推荐

  1. C#如何创建一个可快速重复使用的项目模板

    写在前面 其实很多公司或者资深的开发都有自己快速创建项目的脚手架的,有的是魔改代码生成器实现,有的直接基于T4,RazorEngine等模板引擎打造:但无论如何,其最终目的其实就是搭建一个自定义项目模 ...

  2. 记录一次python3 flask 多线程被执行两次的问题

    前言 最近在使用 python3 flask 做管理服务,需要实现服务中 flask server 和 另一个多线程while循环同时存在,如下 from flask import Flask , j ...

  3. Spring注解之构建器@Builder的用法

    简述 Builder使用创建者模式又叫建造者模式.简单来说,就是一步步创建一个对象,它对用户屏蔽了里面构建的细节,但却可以精细地控制对象的构造过程. 基础使用 @Builder 注解为你的类生成相对略 ...

  4. ROS2开发BUG记录:在将 use_sim_timer 置为 true 时,节点的 Timer_Callback 行为“异常”

    问题: 在将 use_sim_timer 置为 true 时,节点 Timer_Callback 行为 "异常" .在回调函数中,使用 self.get_logger().info ...

  5. 基于表单登录的cookies登录

    1.基于表单登录的cookies登录 In [ ]: import requests import matplotlib.pyplot as plt from http.cookiejar impor ...

  6. 开源免费的专注于建立大型个人知识库推荐-Trilium Notes

    Trilium Notes是一个分层的笔记应用程序,专注于建立大型个人知识库. 支持相当丰富的 markdown,包括 mermaid 和 latex,而且即时渲染,和 typora 一样.支持代码类 ...

  7. 2. CMake 的简单使用

    2. CMake 的简单使用 我们创建一个工程目录,在里面定义一些简单的加减乘除运算,然后定义一个 main.cpp 的文件: 结构如下: tree /f .\ D:\SOURCE\CMAKE_PRO ...

  8. Vue禁止用户复制文案 + 兼容 IE

    vue必须要加载完才可以操作dom,或者在mounted和created时使用this.$nextTick方法,使dom生成后进行相关操作. created() { this.$nextTick(() ...

  9. 在Django中,多数据操作,你可以编写测试来查询另一个数据库服务器中的数据,并将结果导入当前Django项目的数据库表中

    在Django中,你可以编写测试来查询另一个数据库服务器中的数据,并将结果导入当前Django项目的数据库表中.下面是一个简单的示例: 假设你有一个Django应用程序,名为myapp,并且你希望从另 ...

  10. oeasy教您玩转vim - 26 - 缩进设置

    ​ 缩进设置 回忆上节课内容 这次了解了颜色的细节 设置 256 色模式 :set t_Co=256 然后确定了具体的各种颜色 还可以生成网页 :TOhtml 还有什么好玩的么? ​ 缩进设置 ​ 在 ...