Codeforces Round #725 (Div. 3)

20210704。网址:https://codeforces.com/contest/1538。

感觉这个比上一个要难。

A

有一个n个数的数组,我们每次只能拿走最左边/最右边的数。想把最大/最小的数都拿走,最少拿几次。

读入的时候就记录下来最大最小的位置,设左边位置为x,右边位置为y。要不【从左边拿直到拿走y】,要不【从右边拿直到拿走x】,要不【从左边拿直到x+从右边拿直到y】,取个min就可以了。

B

大水题,首先判能不能整除(平分),然后对average以上的人下手。

C

有一个n个数的数组,我们要统计pair的个数。

什么样的pair呢?i<j,并且l<=a_i+a_j<=r。

我的想法是二分搜索:先排序,然后对每一个a_i:

  • 二分搜索得到a_j的范围;
  • 因为要求i<j,所以【a_j的左边界=max(原左边界, i)】。
  • 如果a_j范围已经变成空集,break。再往下肯定更是空集。
  • ans+=a_j范围大小。

D

这个题让我怵了半天……最后看题解才明白怎么做。

给我们三个数,abk。我们必须精确完成k次操作,不多不少,使得ab相等。

一次操作:拿一个数除a,或者除b。当然,要用它们的因子(大于1)来除。

题解:我们的目标是a==b,最多做多少次操作?拿a的质因子一个一个除a,然后拿b的质因子一个一个除b,最后a和b都是1。操作次数就是【a质因子个数+b质因子个数】。

最少呢?如果已经a==b,0次;如果a是b的因子,1次;其余情况,a除a本身,b除b本身,2次。

如果k不在[最少次数,最多次数]的范围内,肯定不行。如果在,一定可以吗?

我们可以一次除【两个质因子乘积】,这样就用一次操作替代两次操作。感性上想,通过这种办法就可以取到最小最大之间所有次数了。

但是最后要注意一个事情!如果a==b,那么没法一次完成。一次的话就只能除一个人,除了之后它和另一个就肯定不相等了,所以不行。

然后是一些编程上的问题:其实不需要打巨大的prime表,只要保证表内最大的质数比sqrt(1e9)要大。用这个表对一个数进行质因子分解,最后得到一堆质因子和一个巨大的丑陋数。如果这个丑陋的数不是质数,那么它=x*y,【xy中更小的那一个】最大只能到sqrt(丑陋数)。如果sqrt(丑陋数)在表里,这个丑陋数肯定会被分解掉。

丑陋数≤1e9,因此【表内最大的质数比sqrt(1e9)要大】就可以了。突然发现其实是很简单的事情,我怎么写了这么久……总之就是,勇敢地认为最后剩下的丑陋数也是质数,这样就能正确统计质因子个数了。

E

给我们很多语句,语句共有两种:字符串赋值(声明字符串变量)和字符串加法(append)。求作为【最后一个语句返回值】的字符串中"haha"字串的个数。

一开始直接模拟的,然后内存爆掉了。给我50条语句,每次都是“a=a+a”的样子,最后会得到长度为2^50的字符串。嗯…教训就是,看见貌似很简单可以直接模拟的题,多想一步。真的能直接模拟吗?

正确做法是,对于字符串赋值,记录【haha个数】【串首3个字符】【串尾3个字符】。对于字符串加法,结果首先是两个【haha个数】相加,在此基础上考察【前串串尾】和【后串串首】拼起来会不会产生新的haha。

如何考察呢?只要看hah+a,ha+ha,h+aha三种情况就可以了,出现一种就++一次。然后记录新的字符串,用【前串串首】【后串串尾】作为新的串首串尾。

最后注意一个事情:如果字符串长度根本不足3,那么串首串尾就赋值为【这个短字符串本身】。拼接的时候,如果原来长度不足3 现在长度有3,要注意维护串首串尾。

F

给我们两个整数l和r,不断++l直到l==r。统计这个过程中【数位变化】总次数。

数位变化:如11->12,变化1。999->1000,变化4。109->110,变化2。

一开始想法有点迷,虽然样例过了但应该确实是错的…不管那个错想法了,题解是这样的:

首先,个位要从l的个位变到r的个位,变r-l次。

然后,十位要从l的十位变到r的十位,变r/10-l/10次。

以此类推。

写一个while循环,每次r/=10,直到r==0。

然后说一点偏玄学的想法:给1e4个测试,每个测试的lr范围都是1e9,限时2s。所以不可能是模拟,也应该不是复杂度常为o(n)o(n^2)的dp。应该是从数据入手一下子算到答案的解法,不是那种一层一层积累的dp。

G

有两种物品,分别有xy个。我们要制作礼物包,一个包要不是【a个第一种物品 b个第二种物品】,要不是【b个第一种物品 a个第二种物品】。问最多可以做多少个包。

很自然(其实是看见算法标签里有greedy)的想法是,用a和b的差距补x和y的差距。设a≥b x≥y,那么多打几个【a个数量多物品 b个数量少物品】的包,即多消耗数量多的物品,直到剩余两种物品数量差不多。然后一个ab包一个ba包,争取每次消耗都相等。(并不会严格证明,也不想证……)

按照这个思路写程序。注意各种特殊情况的识别:

  • 打(x-y)/(a-b)个偏心的包就可以消除数量不平衡了。但是真的能打这么多包吗?我们只能尽量多打,打包数量是取min后的结果。
  • a==b的时候,除a-b会出现除0错误哦,需要特判。
  • 最后没法打【ab包+ba包】了,但说不定还可以打一个【ab包】或者【ba包】。(我其实不清楚是否可能出现这样的情况。)反正最后判一下总是没错的。

刷题记录:Codeforces Round #725 (Div. 3)的更多相关文章

  1. 【做题】Codeforces Round #436 (Div. 2) F. Cities Excursions——图论+dfs

    题意:给你一个有向图,多次询问从一个点到另一个点字典序最小的路径上第k个点. 考虑枚举每一个点作为汇点(记为i),计算出其他所有点到i的字典序最小的路径.(当然,枚举源点也是可行的) 首先,我们建一张 ...

  2. 【做题】Codeforces Round #429 (Div. 2) E. On the Bench——组合问题+dp

    题目大意是给你n个数,求相邻两数相乘不是完全平方数的排列数. 一开始看到这题的时候,本人便想给相乘为完全平方数的数对建边,然后就写萎了... 后来通过集体智慧发现这个重要性质:对于自然数a,b,c,若 ...

  3. Codeforces Round #725 (Div. 3) A-D,F题解

    A. Stone Game 思路:总共3种情况,都从最左端被拿走,都从最右端被拿走,左侧的从最左端被拿走且右侧的从最右端被拿走,取最小值即可 代码: //CF-725.A #include<bi ...

  4. 【做题】Codeforces Round #453 (Div. 1) D. Weighting a Tree——拆环

    前言:结论题似乎是我的硬伤…… 题意是给你一个无向图,已知连接到每一个点的边的权值和(为整数,且属于区间[-n,n]),需要求出每条边权值的一个合法解(都要是在区间[-2*n^2,2*n^2]内的整数 ...

  5. 套题:Codeforces Round #194 (Div. 1) (2/5)

    A. Secrets http://www.cnblogs.com/qscqesze/p/4528529.html B. Chips http://www.cnblogs.com/qscqesze/p ...

  6. DP刷题记录

    目录 dp刷题记录 codeforces 706C codeforces 940E BZOJ3997 POJ2279 GYM102082B GYM102082D codeforces132C L3-0 ...

  7. 刷题记录:Codeforces Round #724 (Div. 2)

    Codeforces Round #724 (Div. 2) 20210713.网址:https://codeforces.com/contest/1536. div2明显比div3难多了啊-只做了前 ...

  8. 刷题记录:Codeforces Round #734 (Div. 3)

    Codeforces Round #734 (Div. 3) 20210920.网址:https://codeforces.com/contest/1551. 编程细节:下标定义不要一会[1,n]一会 ...

  9. 刷题记录:Codeforces Round #739 (Div. 3)

    Codeforces Round #739 (Div. 3) 20210907.网址:https://codeforces.com/contest/1560. --(叹). A 不希望出现带" ...

随机推荐

  1. 这个Spring Security登录插件牛啊,验证码、小程序、OAuth2都能快速接入

    上次我们把验证码登录.小程序登录优雅地集成到了Spring Security,很多同学大呼过瘾,相比较一些传统玩法高级了很多.胖哥就赶紧抓住机会举一反三,把几个非标准的OAuth2也接入了进来,主要是 ...

  2. bat-静默安装winrar并设置系统级环境变量

    @echo off Setlocal enabledelayedexpansion @REM vscode中自动开启延迟环境变量扩展 echo 安装winrar "winrar v.5.71 ...

  3. mysql备份数据库linux

    备份数据库 问题描述: ​ 我们用的是mysql,以今天遇到的情况为例,我们是在两台服务器上要搭相同的平台,部署完成后页面报错,发现是数据库的问题,我们打开数据库查看,确实数据库中少建一个wind数据 ...

  4. 人人都能学会的 Python 多线程指南~

    大家好鸭!有没有想我~(https://jq.qq.com/?_wv=1027&k=rX9CWKg4) 在 Python 中,多线程最常见的一个场景就是爬虫,例如这样一个需求,有多个结构一样的 ...

  5. CentOS yum命令404

    1.获得新的repo列表文件 http://mirrors.163.com/.help/centos.html 2.备份 mv /etc/yum.repos.d/CentOS-Base.repo Ce ...

  6. CesiumJS 2022^ 源码解读[6] - 三维模型(ModelExperimental)新架构

    目录 1. ModelExperimental 的缓存机制 1.1. 缓存池 ResourceCache 1.2. 缓存对象的键设计 ResourceCacheKey 2. 三维模型的加载与解析 2. ...

  7. vmstate 命令详解2022

    vmstat 是一个查看虚拟内存(Virtual Memory)使用状况的工具,但是怎样通过 vmstat 来发现系统中的瓶颈呢? 1. 使用vmstat 使用前我们先看下命令介绍及参数定义 Usag ...

  8. 基于NCF的多模块协同实例

    简介 这次给大家带来的内容是基于NCF的多模块协同实例 主要讲解的内容是NCF的模块Xncf之间相互调用,相互协作的能力 这里可以把Xncf比作乐高玩具,一个Xncf就是你拥有的乐高玩具的类型,比如你 ...

  9. C语言整形转字符串的方法

    今天写力扣第九题,里面用到了这个,就做个笔记.   1. char *itoa( int value, char *string,int radix);(stdlib.h)     Windows特有 ...

  10. Python语言之面向对象

    Python语言之面向对象 前言 面向对象 -- Object Oriented 简写:OO 面向对象设计 -- Object Oriented Design 简写:OOD 面向对象编程 -- Obj ...