Codeforces Round #455 (Div. 2)
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\)排列:
- \(p_i \neq i\)且\(p_i \& i=0\)
- \(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)的更多相关文章
- Codeforces Round #455 (Div. 2) 909D. Colorful Points
题 OvO http://codeforces.com/contest/909/problem/D CF 455 div2 D CF 909D 解 算出模拟的复杂度之后就是一个很水的模拟题 把字符串按 ...
- Codeforces Round #455 (Div. 2) 909E. Coprocessor
题 OvO http://codeforces.com/contest/909/problem/E CF455 div2 E CF 909E 解 类似于拓扑排序地进行贪心, 对于 Ei=0 并且入度为 ...
- 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 ...
- 【Codeforces Round #455 (Div. 2) A】Generate Login
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举两个串的前缀长度就好. 组出来. 排序. 取字典序最小的那个. [代码] #include <bits/stdc++.h& ...
- 【Codeforces Round #455 (Div. 2) B】Segments
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 处理出所有的线 其实就是区间. 总共有n*(n+1)/2个 然后按照左端点.右端点排序 每次取最左边的线. 多种可能就取右端点尽量小 ...
- 【Codeforces Round #455 (Div. 2) C】 Python Indentation
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 一个for循环之后. 下一个写代码的地方一是从(x+1,y+1)开始的 然后如果写完了一个simple statement 下次就有 ...
- 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 ...
- 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 ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
随机推荐
- hive表信息查询:查看表结构、表操作等--转
原文地址:http://www.aboutyun.com/forum.PHP?mod=viewthread&tid=8590&highlight=Hive 问题导读:1.如何查看hiv ...
- Android四大组件之Service(续)
本地服务启动和通过广播的方式回调是非常简单的. 下面介绍远程服务和通过远程回调的方式通知activity的方式. 1.service定义: package com.joyfulmath.globals ...
- Eclipse 保存代码时,不自动换行设置
Eclipse在保存代码时,总是自动换行.尤其是注释,换行后的注释读起来就很混乱.后来发现是在保存文件时设置了自动格式化代码的原因. 关闭自动格式代码设置: windows-->Preferen ...
- python传参
写在前面 Python唯一支持的参数传递方式是『共享传参』(call by sharing) 多数面向对象语言都采用这一模式,包括Ruby.Smalltalk和Java(Java的引用类型是这样,基本 ...
- Jstack、Jmap命令简单使用
TOMCAT_ID为tomcat的进程号. 1.使用jstack查看jvm堆栈信息. /bin/ TOMCAT_ID:无法输出到单独的文件中,只能在tomcat的启动文件中打印相关的堆栈信息. jst ...
- Django模板语言循环字典
1. 对于字典,可以有下列用法: {% for row in user_dict.keys %} {% for row in user_dict.values %} {% for row in use ...
- 【hdu6072】Logical Chain
Kosaraju算法,然後bitset優化 主要是學習一下自寫bitset的姿勢 #include<cstring> #include<algorithm> #include& ...
- 【JavaScript】面向对象的程序设计
一.前言 接着上一篇的内容,继续JavaScript的学习. 二.内容 属性类型 //数据属性[Configurable] —— 能否通过delete删除属性从而重新定义属性,能否修改属 ...
- NOI2018前的每日记录
NOI2018前的每日记录 开头 今天是\(2018.7.2\),不知不觉已经这么久了.本来还是高一的小蒟蒻,过不了多久就要成为高二的老年选手了. 再过半个月我也要去\(NOI\)打酱油了.我这种D类 ...
- 【洛谷3674】小清新人渣的本愿(莫队,bitset)
[洛谷3674]小清新人渣的本愿(莫队,bitset) 题面 洛谷,自己去看去,太长了 题解 很显然的莫队. 但是怎么查询那几个询问. 对于询问乘积,显然可以暴力枚举因数(反正加起来也是\(O(n\s ...