Codeforces Round #455 (Div. 2)

A. Generate Login

题目描述:给出两个字符串,分别取字符串的某个前缀,使得两个前缀连起来的字符串的字典序在所有方案中最小,输出该字符串。

solution
为保证字典序最小,第二个字符串只会选第一个字符,然后先选上第一个字符串的第一个字符(因为不能为空),接着从第二个字符开始,如果该字符小于第二个字符串的第一个字符,那么选上,否则停止,输出答案。

时间复杂度:\(O(n)\)

B. Segments

题目描述:给定一个数\(N\),考虑数轴上的所有端点均为整数且在\([0, N]\)的线段,显然有\(\frac{n(n+1)}{2}\),现将这些线段置于不同层,使得同一层的线段不重叠(端点不算),问最少要多少层?(下图为\(N=4\)时)

solution
考虑长度为一的线段,所有与该线段重叠的线段均在不同层,所以答案至少为\((\frac{n}{2}+1)\frac{n+1}{2}\),事实上,这个就是答案,题解中也没讲得很清楚,只是说可以构造出来

时间复杂度:\(O(n)\)

C. Python Indentation

题目描述:给出一段简略版无缩进的Python代码(只有for和简单语句),问有多少中缩进满足Python语法。

solution
设\(f[i][j]\)表示到第\(i\)条语句缩进了\(j\)次,当第\(i-1\)条语句为for时,第\(i\)条语句必须缩进,所以\(f[i][j]=f[i-1][j-1]\),若不是for则假设第\(i\)条语句缩进\(j\)次,那么这个状态可以从\(f[i-1][k], (k>=j)\)转移过来,也就是后缀和。

时间复杂度:\(O(n^2)\)

D. Colorful Points

题目描述:给定一个只有小写字母的字符串,每次操作选出字符串中与相邻位字母不一样(任意一个即可)的位置,然后删除,剩下的拼接在一起,问能执行多少次这样的操作

solution
因为如果与相邻位字母都相同的话,该字母不会被删除,所以可以把相邻的相同字母看成一组,假设有\(D\)组,每组有\(G(D)\)个字母,因此每一次操作只会把每一组的最左边和最右边删掉。每次求出最少操作数使得某个\(G(D)=0\),更新答案,并更新每组剩下的字母个数,并且进行必要的合并,这里的时间复杂度为\(D\),但每次更新后字母数至少减少\(D\)个,因此总的时间复杂度为\(O(n)\)

时间复杂度:\(O(n)\)

Coprocessor

题目描述:给定一个拓扑图表示依赖关系,并给定每个点(任务)必须在主进程执行还是副进程执行。开始时在主进程,每个任务执行前,它所依赖的任务必须已经执行,在主进程中可以调用副进程,每次调用时都可以执行若干个任务,但每个任务的依赖任务必须在该次调用中或已经执行了,副进程结束后会返回主进程。问至少需要调用多少次副进程才能完成所有任务。

solution
从叶子节点往上dp,假设当前节点为\(i\),\(f[i]\)表示完成该子树的所有任务至少需要调用多少次副进程。如果节点\(i\)必须在主进程执行,那么(\(j\)为\(i\)的儿子)
\[
f[i]=max
\left\{\begin{matrix}
f[j]+1, j在副进程\\
f[j],j在主进程
\end{matrix}\right.
\]
如果\(i\)必须在副进程执行,则\(f[i]=max\){\(f[j]\)}
为了方便,可以添加一个主进程任务\(0\),它的依赖为所有进程,最终答案就是\(f[0]\)

时间复杂度:\(O(n)\)

F. AND-permutations

题目描述:给定一个整数\(N\),寻找两个\(N\)排列:

  1. \(p_i \neq i\)且\(p_i \& i=0\)
  2. \(p_i \neq i\)且\(p_i \& i \neq 0\)
    若不存在,则输出NO

solution
考虑第一个排列。
当\(N\)为奇数时,不存在第一个排列,因为当\(i\)为奇数时,\(p_i\)为偶数(否则二进制最低位为\(1\)),但奇数个数与偶数个数不相等,所以无解。
当\(N\)为偶数时,注意到\((2^k+i) \& (2^k-i-1)\)等于0(\(i \geq 0\)),所以可以找出最大的\(k\)使\(2^k \leq N\),然后构造解,更新\(N=2^{(k+1)}-N-2\),直至\(N=0\)

考虑第二个排列。
手工构造可知,当\(N<6\)时无解,当\(N=6\)时,解为\(3,6,2,5,1,4\),当\(N=7\)时,解为\(7,3,6,5,1,2,4\)。
当\(N>7\)时,因\(8\)~\(15\), \(16\)~\(31\), \(32\)~\(63\), ... , 每组的最高位一致,所以这些数各组循环移动一位即可。

时间复杂度:\(O(n)\)

Codeforces Round #455 (Div. 2)的更多相关文章

  1. Codeforces Round #455 (Div. 2) 909D. Colorful Points

    题 OvO http://codeforces.com/contest/909/problem/D CF 455 div2 D CF 909D 解 算出模拟的复杂度之后就是一个很水的模拟题 把字符串按 ...

  2. Codeforces Round #455 (Div. 2) 909E. Coprocessor

    题 OvO http://codeforces.com/contest/909/problem/E CF455 div2 E CF 909E 解 类似于拓扑排序地进行贪心, 对于 Ei=0 并且入度为 ...

  3. Codeforces Round #455 (Div. 2) A. Generate Login【贪心】

    A. Generate Login time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  4. 【Codeforces Round #455 (Div. 2) A】Generate Login

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举两个串的前缀长度就好. 组出来. 排序. 取字典序最小的那个. [代码] #include <bits/stdc++.h& ...

  5. 【Codeforces Round #455 (Div. 2) B】Segments

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 处理出所有的线 其实就是区间. 总共有n*(n+1)/2个 然后按照左端点.右端点排序 每次取最左边的线. 多种可能就取右端点尽量小 ...

  6. 【Codeforces Round #455 (Div. 2) C】 Python Indentation

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 一个for循环之后. 下一个写代码的地方一是从(x+1,y+1)开始的 然后如果写完了一个simple statement 下次就有 ...

  7. Codeforces Round #455 (Div. 2) D题(花了一个早自习补了昨晚的一道模拟QAQ)

    D. Colorful Points You are given a set of points on a straight line. Each point has a color assigned ...

  8. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  9. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

随机推荐

  1. poj2914-Minimum Cut

    题意 \(n\) 个点 \(m\) 条边的无向带权图求全局最小割.\(n\le 500,m\le \frac{n(n-1)}{2}\) . 分析 参考了 这篇博客,去给他点赞. 嘛,今天研究了一下全局 ...

  2. 【bzoj3730】震波 动态点分治+线段树

    题目描述 在一片土地上有N个城市,通过N-1条无向边互相连接,形成一棵树的结构,相邻两个城市的距离为1,其中第i个城市的价值为value[i].不幸的是,这片土地常常发生地震,并且随着时代的发展,城市 ...

  3. Codeforces Round #362(Div1) D Legen...(AC自动机+矩阵快速幂)

    题目大意: 给定一些开心串,每个串有一个开心值,构造一个串,每包含一次开心串就会获得一个开心值,求最大获得多少开心值. 题解: 首先先建立AC自动机.(建立fail指针的时候,对val要进行累加) 然 ...

  4. Unified Networking Lab 安装使用IOL镜像

    Unified Networking Lab 安装使用IOL镜像 Unified Networking Lab 很久以前,在一个星系远的地方,很远的工程师们为eBay寻找二手路由器来满足家庭实验的需求 ...

  5. 用CSS3画出一个立方体---转

    css3实践—创建3D立方体 要想实现3D的效果,其实非常简单,只需指定一个元素为容器并设置transform-style:preserve-3d,那么它的后代元素便会有3D效果.不过有很多需要注意的 ...

  6. 2015/11/1用Python写游戏,pygame入门(1):pygame的安装

    这两天学习数据结构和算法,有时感觉并不如直接做项目来的有趣.刚刚学完python的基本使用,现在刚好趁热打铁做个小项目. 由于本人一直很想制作一款游戏,就想使用Python制作一个基础的游戏.搜了一下 ...

  7. 原生JS实现省市区(县)三级联动选择

    原文地址→看过来 写在前面 前段时间写一个关于天气的东西,里面的省市区(县)城市选择让我很头疼,在网上搜索出来大都是借助插件或者第三方库,感觉这样做代码会很重,所以索性就把几种城市选择的方式实现一遍, ...

  8. CSS3的新属性

    1.圆角矩形 .border_radius_test{ border-radius:25px; -moz-border-radius:25px; } 数值越大越圆 2.容器阴影 .box_shadow ...

  9. Disruptor的使用

    ..................2015年的第一天................... 本文代码托管在 https://github.com/hupengcool/disruptor-start ...

  10. linux内核文件系统:proc、tmpfs、devfs、sysfs简要介绍

    linux内核文件系统:proc.tmpfs.devfs.sysfs proc:虚拟文件系统,在linux系统中被挂载与/proc目录下.里面的文件包含了很多系统信息,比如cpu负载. 内存.网络配置 ...