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. es6.4.2api

    这是讲数据库的数据导入到es里  所有用到了mysql! 1.依赖 <?xml version="1.0" encoding="UTF-8"?> & ...

  2. 基于数传电台的组态王控制实现远程采集控制器PLC

    「物联网应用案例」基于数传电台的组态王控制 一.案例介绍 采用亚控科技组态王结合亿佰特E90系列数传电台实现远程采集控制PLC.在这里主要介绍通信环境的搭建,故不采用过于复杂的控制程序,但为了体现控制 ...

  3. Java JavaMail通过SMPT发送邮件

    概述 本讲讲述如何使用JavaMail工具包,通过SMPT协议,在Java代码中发送邮件. 一.JavaMail简介 JavaMail API提供了一个独立于平台且与协议无关的框架来构建邮件和消息传递 ...

  4. ESXI系列问题整理以及记录——使用SSH为设备打VIB驱动包,同时提供一种对于ESXI不兼容螃蟹网卡(Realtek 瑞昱)的问题解决思路

    对于ESXI不兼容螃蟹网卡的问题,这里建议购买一张博通的低端单口千兆网卡,先使用博通网卡完成系统部署,再按照下文方法添加螃蟹网卡的VIB驱动,最后拆除博通网卡. 螃蟹网卡VIB驱动包下载地址:http ...

  5. AsList()方法详解

    AsList()方法详解 在Java中,我们应该如何将一个数组array转换为一个List列表并赋初始值?首先想到的肯定是利用List自带的add()方法,先new一个List对象,再使用add()方 ...

  6. python-将print内容保存到文件

    通过sys.stdout得到print输出的内容,再进行保存 import sys class Logger(object): def __init__(self, file_path: str = ...

  7. SAP Web Dynpro - 教程

    SAP Web Dynpro是一种标准的SAP UI技术,用于使用图形工具和与ABAP工作台集成的开发环境来开发Web应用程序. 图形工具的使用减少了实施工作,并有助于维护ABAP工作台中的组件. 本 ...

  8. 02 CSS块级元素和行内元素

    02 CSS块级元素和行内元素 划分依据:根据标签内部可以存放的元素内容不同进行划分,它与CSS样式无关. 要先了解这个 得先了解 什么是容器级别的标签和文本级? 容器级标签 什么是容器级标签? 内部 ...

  9. cx_Oracle.DatabaseError: ORA-28759: failure to open file

    找了好久这个问题,有人说是tcps的问题,需要自己生成证书什么的,后来才发现原来是 钱包文件路径 的问题,钱包文件解压后必须放在instantclien/network/admin下,在Windows ...

  10. Jira7.3.8环境搭建

    安装JDK sudo apt-get install openjdk-8-jdk 安装&配置MySQL sudo apt-get install mysql-server 创建jira用户 # ...