5.16 acm模拟赛总结
Posted 卿吟酒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.16 acm模拟赛总结相关的知识,希望对你有一定的参考价值。
去了HPU打acm模拟(作为高中生混进去的)
记录一下那天的比赛网址:
https://vjudge.net/contest/438497#problem/J
题目订正及分析:
T J
题目来源:
https://vjudge.net/problem/AtCoder-zone2021_c/origin
(已订)
题目大意:n个人 每个人五个属性 选出三个人出来 三个人的每项属性都取三个人该属性的最大值 最后的总能力是取完最大值的五项属性中的最小值
思路:二分+状压
二分一个最后可能的答案 然后进行验证。
将五个属性转换为一个五位的二进制数
验证时,若该位上的属性的数大于等于验证数,那么这个属性转成的二进制位对应是1。
例如: 25 25 25 25 25 对应验证值5 那么就转成1 1 1 1 1 。
假设记录二进制转化的变量为 r e c rec rec 存二进制数的数组为 q w q [ i ] qwq[i] qwq[i]。
五个属性处理完后,使 q w q [ r e c ] = r e c qwq[rec]=rec qwq[rec]=rec
然后在小于 t = ( 1 < < 5 ) t=(1<<5) t=(1<<5) 范围内三重循环,若 q w q [ i ] ∣ q w q [ j ] ∣ q w q [ k ] = = ( t − 1 ) qwq[i]|qwq[j]|qwq[k]==(t-1) qwq[i]∣qwq[j]∣qwq[k]==(t−1) 那么则使验证的答案为true。
做或运算的原因在于 每项属性是取三个人中的最大值的,而最后要求等于(t-1)是由于 能力值取得是五项中最小
T F
题目来源:
https://codeforces.com/problemset/problem/1263/E
(已订)
题目大意: 你有一个编辑器 ,光标最开始在1位置。
接下来给你一串命令,‘R’代表右移 ‘L’代表左移(不能小于1位置),‘(’ ,‘)’ ,以及
a
,
b
,
.
.
.
z
a,b,...z
a,b,...z等小写字母代表在光标处输入一个该字符。
若该光标位置上原有字符 则进行替换,若该序列括号匹配不合法,输出-1;否则输出最大括号嵌套层级,每收到一个命令后输出。
例:(()()) 的层级为2 ; ()()的层级为1 ;()()(())的层级为2 ;)()不合法
思路:线段树 区间操作 前缀和
线段树记录区间最大值和区间最小值;
另开一个字符数组 l i n e line line 记录有效字符(即操作后现在在编辑器里的所有字符);
记录一个 p o s pos pos 代表现在编辑器光标指向的位置
假设原串为 s s s 那么对应s进行 p o s pos pos 的操作
若要添加字符 则先消去原线段树中
p
o
s
pos
pos 原字符的影响。
对于一个新添加的字符‘(’ 在
[
p
o
s
,
n
]
[pos,n]
[pos,n]范围内+1, 而对于一个‘)’ 则在
[
p
o
s
,
n
]
[pos,n]
[pos,n]范围内-1;
维护一个
c
n
t
cnt
cnt 若读进一个‘(’ 则
c
n
t
+
+
cnt++
cnt++,若读进一个‘)’ 则
c
n
t
−
−
cnt--
cnt−−.
若 c n t ! = 0 cnt !=0 cnt!=0或者 [ 1 , n ] [1,n] [1,n] 范围内的最小值小于0 那么目前的序列不合法;
(例如 在2号位置放‘)’ 3号位置放‘(’ 那么虽然 c n t cnt cnt =0 但是区间最小值为‘-1’ 而且我们知道 ‘)(’ 显然是一种不合法的情况)
而对于合法的序列 输出范围内的最大值
要注意的是 每次在光标位置填入新字符前,应消去前一个字符的影响,消去影响的操作和添加操作恰好相反
以上是关于5.16 acm模拟赛总结的主要内容,如果未能解决你的问题,请参考以下文章
模拟赛小结:2014-2015 ACM-ICPC, NEERC, Southern Subregional Contest