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. python创建分类器小结

    简介:分类是指利用数据的特性将其分成若干类型的过程. 监督学习分类器就是用带标记的训练数据建立一个模型,然后对未知数据进行分类. 一.简单分类器 首先,用numpy创建一些基本的数据,我们创建了8个点 ...

  2. WinForms拖控件拖到天荒地老

    更新记录: 2022年4月15日:本文迁移自Panda666原博客,原发布时间:2021年4月18日. 2022年4月15日:更新自动生成Web CURD工具. 说明 Winforms的控件拖起来是真 ...

  3. Volcano社区v1.6.0版本正式发布

    摘要:Volcano社区v1.6.0版本正式发布.此次版本增加了弹性作业管理.基于真实负载的动态调度. 基于真实负载的重调度.Volcano Job插件--MPI等多个新特性. 本文分享自华为云社区& ...

  4. vue大型电商项目尚品汇(后台终结篇)day06 重磅!!!

    自此整个项目前后台,全部搭建完毕. 今天是最后一天,内容很多,而且也比较常用,一个图标类数据可视化,一个后台的权限管理,都是很经典的类型. 一.数据可视化 1.简介 专门的一门学科,有专门研究这个的岗 ...

  5. 2m高分辨率土地利用分类数据

    数据下载链接:百度云下载链接 土地利用数据是在根据影像光谱特征,结合野外实测资料,同时参照有关地理图件,对地物的几何形状,颜色特征.纹理特征和空间分布情况进行分析,建立统一解译标志的基础之上,依据多源 ...

  6. 可变参数和Collections集合工具类的方法_addAll&shuffle

    可变参数 可变参数:是JDK1.5之后出现的新特性 使用前提:当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数 使用格式:定义方法时使用 ~修饰符 返回值类型 方法名(数据类 ...

  7. SSH 多密钥配置

    目录 前言 一.SSH 是什么 二.密钥生成工具 三.密钥类型 四.本地配置 1.单密钥配置 2.多密钥配置 五.远端配置 1.GitHub/Gitee 2.服务器 前言 当我们从 GitHub 克隆 ...

  8. Mybatis-Generator 自定义注释

    继承DefaultCommentGenerator 或者CommentGenerator package com.zhianchen.mysqlremark.toword.config;import ...

  9. 4-6 Mabatis 框架

    Mabatis 框架 Ⅰ.关于Mabatis 对数据库中的数据进行访问的框架 数据库执行过程: 连接数据库-->准备好SQL-->发送SQL语句-->执行语句-->获取结果-- ...

  10. centos 8及以上安装mysql 8.0

    本文适用于centos 8及以上安装mysql 8.0,整体耗时20分钟内,不需要FQ 1.环境先搞好 systemctl stop firewalld //关闭防火墙 systemctl disab ...