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. python重拾第十三天-那就做个堡垒机吧

    本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功 ...

  2. 在SMT32程序HEX文件中加入固件版本信息

    将固件版本信息定义成一个常量存放在程序中,需要的时候可以通过串口等接口查询代码版本信息,另一种,是利用编译器的语法,将固定的信息保存到某地. #define VERINFO_ADDR_BASE (0x ...

  3. 关于docker-compose up -d 出现超时情况处理

    由于要搭建一个ctf平台,用docker一键搭建是出现超时情况 用了很多办法,换源,等之类的一样没办法,似乎它就是只能用官方那个一样很怪. 只能用一种笨办法来处理了,一个个pull. 打个比如: 打开 ...

  4. Taro 滚动切换tab页

    import React, { Component } from 'react' import { View, Text, ScrollView } from '@tarojs/components' ...

  5. .Net Core 全局捕获异常-中间件

    1.代码版本 .Net Core 版本 2.2 2.目录结构 3.定义中间件 新建一个类 CustomerExceptionMiddleware.cs /// <summary> /// ...

  6. ubuntu16.04 安装 eclips c/c++

    前言 最近需要在ubuntu16上使用eclips编译c,尝试了apt安装和官网最新包安装甚至应用商店安装,效果都不太理想,现在把我的安装方法记录一下. 正文 !!!前提,已经自己配置好了java8的 ...

  7. Swagger注解说明

    常用注解: - @Api()用于类: 表示标识这个类是swagger的资源 - @ApiOperation()用于方法: 表示一个http请求的操作 - @ApiParam()用于方法,参数,字段说明 ...

  8. SpringBoot 日志文件 logback-spring.xml

    日志文件 将logback-spring.xml配置文件,放到:/src/main/resources中 <?xml version="1.0" encoding=" ...

  9. vue中 lang="ts"与js的区别

    `lang="ts"` 与 `js` 的区别在于指定了脚本语言的类型,其中: - `lang="ts"` 指定了 TypeScript,一种由微软开发的 Jav ...

  10. jwt redis,微信登陆知识复习 uniapp 请求封装,统一异常处理 相关, HutoolDemo工具介绍)

    第三节   后台布局搭建,代码可以人工智能来写,但是环境初步搭建需要我们先建起来,所以以下记录快带搭建的过程, 思路: 后台首页的搭建 第一   用到了element--UI 自带的页面布局组件,它就 ...