A

显然 \(n\) 个队的得分之和为 \(0\),因此答案为这 \(n-1\) 个数的和的相反数。

赛时代码

B

小贪心。

将所有人按 \(b\) 升序排序,\(b\) 相同时按 \(a\) 降序,对每个人按 \(b\) 进行分类讨论:

  • 若 \(b< p\),那么我们一定要选这个人,因为选了这个人我们就可以用当前最小的代价去选其他的人。

  • 若 \(b\ge p\),那么直接用 \(p\) 的代价选这个人就可以。

还要注意一些边界之类的东西,细节还是有的。

赛时代码

C

细节题。

我们可以看一下当 \(n=3,m=9\) 时的情况:

\[\begin{aligned}
0\ 0\ 0\ 0\\
0\ 1\ 1\ 1\\
0\ 0\ 2\ 2\\
0\ 0\ 0\ 3\\
0\ 1\ 1\ 4\\
0\ 0\ 2\ 5\\
0\ 0\ 0\ 6\\
0\ 1\ 1\ 7\\
0\ 0\ 2\ 8\\
0\ 0\ 0\ 9\\
\end{aligned}\]

不难发现规律:

  • 当 \(k>3\) 时,无解。

  • 当 \(k=1\) 时,有且只有一组解,即全 \(0\) 序列。

  • 当 \(k=2\) 时,有 \(\min(n,m)+\max(0,\lfloor\frac{m}{n}\rfloor -1)\) 组解。

  • 当 \(k=3\) 时,有 \(\max(0,m-n-\lfloor\frac{m}{n}\rfloor+1)\) 组解。

赛时代码

D

简单题。

我们只需要计算对于每个值,它作为最大值出现在了几个方案中即可,产生的贡献就是方案数与其值的乘积。

我们将序列降序排序,按值从大到小考虑,设当前考虑的值为 \(x\),对应的下标为 \(y\)。

因为我们需要强制钦定 \(x\) 为最大值,这就意味着比 \(x\) 大的值都不能选,又因为只要选了一个位置,其倍数都会被选,所以这就意味着比 \(x\) 大的值的下标的约数一个都不能选。

那么我们统计 \(y\) 的约数中有几个可以选,设这个值为 \(a\),再设当前所有能选的数的个数为 \(b\),那么 \(x\) 对应的方案数就是 \((2^a-1)\times 2^{b-a}\),也就是 \(a\) 中至少选一个,剩下的 \(b-a\) 个随便选的方案数,这是因为 \(a\) 中至少要选一个才能选到 \(x\)。

时间复杂度为调和级数 \(O(n\log n)\)。

赛时代码

E

构造题。

将 \(i\) 向 \(a_i\) 连单向边,建成内向基环森林。

一种构造方案等价于将点黑白染色,黑白染色的过程比较复杂,具体看代码,主要就是:

  • 如果存在奇环,无解。

  • 如果存在偶环,那么黑白交替染色。

  • 如果自己不存在子节点为白色,那么自己是白色。

  • 如果自己存在子节点为白色,那么自己是黑色。

最后方案就是所有白点的出点编号,也就是白点下标对应的值。

赛后代码

CF1877 Div2 A-E 题解的更多相关文章

  1. Codeforces Round#630 div2 A~C题解

                                                                                                        ...

  2. Codeforces Round #549 div2 1143-B Nirvana 题解

    Kurt reaches nirvana when he finds the product of all the digits of some positive integer. Greater v ...

  3. cf div2 round 688 题解

    爆零了,自闭了 小张做项目入职字节 小李ak wf入职ms 我比赛爆零月薪3k 我们都有光明的前途 好吧,这场感觉有一点难了,昨天差点卡死在B上,要不受O爷出手相救我就boom zero了 第一题,看 ...

  4. 833(DIV2)——C题题解

    题目链接 题目大意: 给定n个数,你可以对数值为0的数改变其为任意值,问最后前缀和为0的个数的最大值. 思路: 这题比较可惜,自己的思路没有问题,但是他少了一些东西.对数组进行前缀和处理,我们可以发现 ...

  5. Codeforces Beta Round #96 (Div. 2) (A-E)

    写份DIV2的完整题解 A 判断下HQ9有没有出现过 #include <iostream> #include<cstdio> #include<cstring> ...

  6. CF Educational Round 78 (Div2)题解报告A~E

    CF Educational Round 78 (Div2)题解报告A~E A:Two Rival Students​ 依题意模拟即可 #include<bits/stdc++.h> us ...

  7. CF1169(div2)题解报告

    CF1169(div2)题解报告 A 不管 B 首先可以证明,如果存在解 其中必定有一个数的出现次数大于等于\(\frac{m}{2}\) 暴力枚举所有出现次数大于等于$\frac{m}{2} $的数 ...

  8. CF Round #580(div2)题解报告

    CF Round #580(div2)题解报告 T1 T2 水题,不管 T3 构造题,证明大约感性理解一下 我们想既然存在解 \(|a[n + i] - a[i]| = 1\) 这是必须要满足的 既然 ...

  9. 洛谷3月月赛div2 题解(模拟+数学+贪心+数学)

    由于本人太蒻了,div1的没有参加,胡乱写了写div2的代码就赶过来了. T1 苏联人 题目背景 题目名称是吸引你点进来的. 这是一道正常的题,和苏联没有任何关系. 题目描述 你在打 EE Round ...

  10. Codeforces Round #707 Editorial Div2 题解

    CF1501 Div2 题解 CF1501A 这道题其实是一道英语阅读题,然后样例解释又不清晰,所以我看了好久,首先它告诉了你每个站点的预期到达时间 \(a_i\) ,以及每个站点的预期出发时间 \( ...

随机推荐

  1. WPF 项目使用 Grpc.Tools

    1 WPF 项目使用 Grpc.Tools 1.1 方法一 把 proto 文件和 Grpc.Tools 单独建一个类库项目,WPF 项目引用这个类库项目. 解决 Grpc.Tools 自动生成的 C ...

  2. 前端查询天气的html

    <html> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script&g ...

  3. 调用内部或私有方法的N种方法

    非公开的类型或者方法被"隐藏"在程序集内部,本就不希望从外部访问,但是有时候调用一个内部或者私有方法可能是唯一的"救命稻草",这篇文章列出了几种具体的实现方式. ...

  4. LiveCD 与 救援模式、紧急模式

    LiveCD 参考:live CD LiveCD 能够使你在不安装到硬盘的前提下,体验操作系统.大多数 Linux 桌面发行版都提供 LiveCD,这是宣传自己的一种很有效的方式. 救援模式 救援模式 ...

  5. 解决: better-scroll.esm.js?f40f:180 [BScroll warn]: EventEmitter has used unknown event type: "pullingUp"

    改为这样,把所有值设为true mounted() { // 滚动条 this.scroll = new BScroll(this.$refs.wrapper, { click: true, obse ...

  6. 浏览器中的自动化操作插件:Automa

    相信很多小伙伴跟我一样,每天都有大量基于浏览器的重复操作,比如:查看任务.查看新闻.查看各种每天要关注的内容,甚至可能还需要对其做一些操作.那么这些任务是否有办法自动化执行呢? 今天就给大家推荐一个浏 ...

  7. Oracle 11g手工建库

    搭建环境 1.建立相应的目录 mkdir /u01/app/oracle/oradata/test1 mkdir /u01/app/oracle/fast_recovery_area/test1 mk ...

  8. quarkus依赖注入之七:生命周期回调

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇的知识点是bean的生命周期回调:在be ...

  9. [nginx]lua控制请求头

    前言 nginx原生提供expires.add_header两个指令控制请求头,在Lua API中也有类似的指令. 添加请求头 指令:ngx.req.set_header 语法:ngx.req.set ...

  10. 1.创建一个类,类A中定义了一个方法,该方法能接受3个参数根据参数判断是做加法还是减法并返回计算结果;

    class A: def cal(self,x,y,z): if z=='+': return x+y if z=='-': return x-y else: print('error') a=A() ...