Codeforces Round #731 (Div. 3)

20210803。网址:https://codeforces.com/contest/1547。

感觉这次犯的低级错误有亿点多……

A

一个大水题。

B

给我一个字符串,让我判断它是否alphabetical。一个alphabetical字符串可以这样生成:首先放一个a,然后在左边/右边放一个b,然后再在新字符串的左边/右边放一个c……也就是,新串=最新字母.append(旧串),或新串=旧串.append(最新字母)。

所以我们维护一个left一个right,left和right的初值为0和n-1,不断用这两个指针去比较边缘处的字母是否为【当时所加入的最新字母】,进行剥洋葱般的操作。

C

两个人打算coauthor一篇paper,每一时刻只能有一个人在操作,操作只能是增加一行或修改【已存在】的一行。两个人都有自己的操作序列,只能按照这个顺序来进行操作。给出paper原始行数和两个人的操作序列,问他们能否合作成功,如果成功就给出一个可行的总操作序列。

关于两个人的操作序列:若甲的操作序列是12,乙的操作序列是45,那么可以1245、4512、1425、4152、1452、4125,也就是1必须在2之前,4必须在5之前。

我的想法是简单的贪心:只要不出现【修改不存在的一行】这种情况,那么就可以成功。保险起见,当然希望修改前的行数越多越好。所以在试图生成总操作序列时,如果还可以增加一行,那就继续增加。如果两个人都只能做修改操作了,那就【先判断此时有没有可以做的修改操作】,如果有的话【接着判断那个人能否一鼓作气再增加几行】。

D

一个growing的数列是这样的:把所有数用二进制表示,\(a_i\)​​中为1的那些位在\(a_{i+1}\)​​​中也为1,也就是\(a_i\&a_{i+1}=a_i\)​​​。两个co-growing的数列满足:它们每一个数【按位异或】后得到的新数列是growing的。

给我们一个数列,让我们找一个【按字典序比较】最小的数列,使得这两个数列co-growing。

异或是这样一种操作:输入1就改变一位,输入0就不改变。首先,对于\(a_i\)​​中为0 \(a_{i+1}\)​​中为1的一位,用异或将\(a_i\)​​中的该位变成1,是没有必要的。然后,对于\(a_i\)​​中为1 \(a_{i+1}\)​​中为0的一位,与其用异或将\(a_i\)​​中的该位变成0,不如用异或将\(a_{i+1}\)​​​中的该位变成1,因为我们想要【按字典序】最小的序列,靠前的数越小越好。这样,\(a_0\)​完全不改变,\(a_1\)​改变去贴合\(a_0\)​,\(a_2\)​改变去贴合\(a_1\)​,……,就可以得到我们想要的数列了。

E

有一个长度为n(就是有n个位置)的走廊,每一个位置可以放一个空调或不放。某一个位置的温度为:【某一空调温度+空调与该位置距离】的最小值。(可以看出,题目认为空调是制冷而非制热的。)

现在给出空调的分布,让我们求每一位置的温度。

我的想法是简单的扫描:先考虑冷风从左往右传的情况,从左往右扫描一遍,维护一个【等效空调】。对于没有空调的位置,就用【等效空调+冷风从左往右传】算温度;对于有空调的位置,判断【该空调】和【等效空调传到此位置的冷风】哪一个更冷,更新等效空调。然后考虑冷风从右往左传的情况,再从右往左扫一遍。对两个结果取min,就是每个位置的温度了。

编程细节:为了好处理,可以在0和n+1两个位置放上无穷热的空调。

F

给我们一个全是正整数的数列,问操作多少次能使数列的每一个数都一样。

一次操作:每个数=它(\(a_i\))与它右边的那个数(\(a_{i+1}\))的gcd。\(a_{n-1}\)去和\(a_0\)取gcd,即\(a_{n-1}=gcd(a_{n-1},a_0)\)​​。

做法:首先求这个数列所有数的gcd,然后所有数都除它。这样,多次操作后【所有数都一样】就是【所有数都为1】了。然后打一个素数表,对每个素数进行这样的操作:对数列中每个数判断该素数是否为其因子,考察【最长的、每个数都是该素数倍数的连续数列】有多长。我们做【该长度】次操作,就可以把这个素数因子消除了。所以,最后的答案是:对每个素数求【长度】,然后取max。

编程细节:数列中的数最大有\(10^6\)这么大,因此我们可以打一个只到\(10^3\)的素数表。然后对于判断过的素数,把数列中的每一个数都不停地除这个素数,直到这个素数彻底不是任何一个数的因子。这样,考虑完素数表中的素数,如果数列里还有很大很丑陋的数,就可以认为这是一个大素数,我们要对大素数再求一次【长度】。此处我犯了一堆错误,并且不是第一次犯类似错误了……

G

给我们一个有向图,可能会有环和自环,但没有重边。对于每一个节点,判断【节点1没有路径到达它(0)/有1条路径到达它(1)/有多条(但有限)路径到达它(2)/有无数条路径到达它(-1)】。如果节点1没有通向它自己的自环,那么就是1,否则-1。

做法:dfs的思想。

  • 从1出发开始dfs,搜过的节点标记成黑色,正在搜(正在遍历它的分支)的节点标记成灰色,未搜过的节点标记成白色。
  • dfs的过程是这样的:对于一个白色的节点,遍历它邻接的所有节点:如果该节点是白色的,就继续dfs该节点。
  • 如果发现我邻接的节点是灰色的,正是从它那里递归调用才会遍历到我,而我现在又试图递归搜索它,这证明我们都是-1。
  • 如果发现我邻接的节点是黑色的,证明已经有人先遍历过它了,它可以通过别的路径到达,这样的节点应该是2。如果它不是-1,它就是2。
  • 因此,我们先进行dfs,同时维护-1集合和2集合。把所有能dfs到的节点标为1,遇到灰色情况就把节点加入-1集合,遇到黑色情况就把节点加入2集合。然后,对于-1集合中的每个节点进行搜索,它们能到达的所有节点都应该是-1。对于2集合中的所有节点进行搜索,它们及它们能到达的【不是-1的】所有节点都应该是2。

编程细节:加入2集合的节点也可能是-1,比如说这样的情况:

刷题记录:Codeforces Round #731 (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 #453 (Div. 1) D. Weighting a Tree——拆环

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

  4. 套题: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 ...

  5. DP刷题记录

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

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

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

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

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

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

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

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

    Codeforces Round #725 (Div. 3) 20210704.网址:https://codeforces.com/contest/1538. 感觉这个比上一个要难. A 有一个n个数 ...

随机推荐

  1. jenkins 自动化部署vue前端+java后端项目 进阶一

    今天又不想写了,那么我来将我参考的文章直接分享给大家好了,大家也可以直接进行参考: 这里以centos7为例搭建自动化部署项目: 1.搭建部署前端服务代理nginx: 借鉴于:https://blog ...

  2. ER图/模型转换为关系模型

    ER图中的主要成分是实体类型和联系类型,转换规则就是如何把实体类型.联系类型转换成关系模式. 1. 二元联系转换 规则1.1(实体类型的转换):将每个实体类型转换成一个关系模式,实体的属性即为关系模式 ...

  3. SpringCloud微服务实战——搭建企业级开发框架(四十一):扩展JustAuth+SpringSecurity+Vue实现多租户系统微信扫码、钉钉扫码等第三方登录

      前面我们详细介绍了SSO.OAuth2的定义和实现原理,也举例说明了如何在微服务框架中使用spring-security-oauth2实现单点登录授权服务器和单点登录客户端.目前很多平台都提供了单 ...

  4. 并发bug之源(一)-可见性

    CPU三级缓存 要聊可见性,这事儿还得从计算机的组成开始说起,我们都知道,计算机由CPU.内存.磁盘.显卡.外设等几部分组成,对于我们程序员而言,写代码主要关注CPU和内存两部分.放几张马士兵老师的图 ...

  5. .NET中按预定顺序执行任务

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月1日. 一.说明 在.NET中线程可以定义按先后顺序进行执行,适合部分有先后次序的业务逻辑.Task也可以按照预定义的先后顺序执行 ...

  6. 轻量级多级菜单控制框架程序(C语言)

    1.前言 作为嵌入式软件开发,可能经常会使用命令行或者显示屏等设备实现人机交互的功能,功能中通常情况都包含 UI 菜单设计:很多开发人员都会有自己的菜单框架模块,防止重复造轮子,网上有很多这种菜单框架 ...

  7. 基于web3D展示技术的煤矿巷道3D可视化系统

    地下开采离不开巷道工程.煤矿的生产.运输.排水.通风等各个环节都少不了巷道的支持.在煤矿智能化建设被提上日程的今天,巷道工程的智能化.可视化建设也成了行业趋势.尤其是复杂的井下作业环境,人员信息安全问 ...

  8. BUUCTF-穿越时空的思念

    穿越时空的思念 音频题的话一般是摩尔斯电码,软件打开音频发现 短的为. 长的为- 空缺的为空格 ..-. ----- ..--- ----. -... -.. -.... ..-. ..... ... ...

  9. Python-安装pycocotools错误记录

    安装 pycocotools 时出现错误 fatal error: Python.h: No such file or directory 解决方式 apt-get install python3.8 ...

  10. python小题目练习(七)

    题目:实现如下图所示结果 代码实现: """Author:mllContent:模拟火车订票系统Date:2020-11-16"""# 定义 ...