链接:https://codeforces.com/contest/1244
来源:Codeforces Round #592 (Div. 2)
文章目录
A. Pens and Pencils(签到)
题意:一支钢笔可以写
c
c
c 篇文章,一支铅笔可以写
d
d
d 篇作业,现有
a
a
a 篇文章和
b
b
b 篇作业,问需要多少铅笔和钢笔,并且总量不超过
k
k
k。
B. Rooms and Staircases(思维)
题意:
N
i
k
o
l
a
y
Nikolay
Nikolay 可以在一个
2
∗
n
2*n
2∗n 的图中任意走动,现在给你一个字符串,
i
i
i 位置上的是
0
0
0 表示上下不联通,否则表示上下联通。
思路:设置两个值
l
l
l
r
r
r,分别表示第一次
1
1
1 出现的位置和最后一次
1
1
1 出现的位置。答案显然就是
m
a
x
(
2
n
,
m
a
x
(
2
r
,
2
(
n
−
l
+
1
)
)
)
max(2n,max(2r,2(n-l+1)))
max(2n,max(2r,2(n−l+1)))。
C. The Football Season(思维)
题意:一个球队进行了
n
n
n 场比赛,在一场比赛中,如果赢了就可以得到
w
w
w 分,平手可以得到
d
d
d 分,现在一个球队一共得到了
p
p
p 分,问这个球队赢输平的比赛分别有多少?
即:
{
x
⋅
w
+
y
⋅
d
=
p
x
+
y
+
z
=
n
\begin{cases} x \cdot w+y\cdot d =p\\ x+y+z=n \end{cases}
{x⋅w+y⋅d=px+y+z=n 求解
x
x
x
y
y
y
z
z
z ,无解,输出
−
1
-1
−1
思路:从题目中我们可以发现,
w
>
d
w > d
w>d,那么我们就可以枚举
y
y
y,它的值一定不会超过
w
w
w,一旦超过
w
w
w,那么一定可以有一个
x
x
x 可以放在前面,所以对于此题我们直接枚举
y
y
y 即可。
D. Paint the Tree(dfs)
题意:题目中输入
n
n
n 表示一共有
n
n
n 个点,然后给出一个矩阵表示每个点用颜色
j
j
j 去涂的花费是多少,然后给出由
n
n
n 个点组成的一个图,问颜色涂完后,在相连任意三个点颜色都不相同的情况下的最小花费。如果不能保证相连任意三点颜色不相同,输出
−
1
-1
−1
思路:首先,容易想到,如果一个点有三个分支,那么这个点延伸出去的点无论如何都不能保证相连任意三点颜色不相同(因为只用三种颜色),故如果一个点的度
>
2
>2
>2,那么一定输出
−
1
-1
−1,否则,对于需要染色的点,在此题目中我们一定可以找到度为
1
1
1 的点,我们先确定这个点的颜色,然后确定它们一个点的颜色,后面的颜色就都固定了(相连任意三点颜色不相同),前两个点的颜色一共有
6
6
6 中情况,我们对这
6
6
6 中情况分别进行
d
f
s
dfs
dfs 就可以得到最小花费,记录最小花费的所使用的是哪一种方案,对这种方案,从度为
1
1
1 的点开始
d
f
s
dfs
dfs 保存出每个点用的颜色的序号,最后输出即可。
E. Minimizing Difference(二分)
题意:给
n
n
n 个数,
k
:
k:
k:表示这些数最多可以操作
k
k
k次。每次操作只能让某个数
+
1
+1
+1
o
r
or
or
−
1
-1
−1,问在有限的操作次数内,这组数的极差最小是多少?
思路:对答案进行二分,对于每一个
a
n
s
ans
ans ,我们判断是否能在
k
k
k 次之内将极差变成我们当前的
a
n
s
ans
ans,判断是否满足:我们先假设每个数都是一个下界,我们找到大于下界的第一个数位置
l
l
l,然后位置
−
1
-1
−1 ,那么此位置及此位置之前的数都将变成这个下界,那么这个操作次数就是
l
∗
a
[
i
]
−
s
u
m
[
l
]
l*a[i]-sum[l]
l∗a[i]−sum[l] ,上界就是
a
[
i
]
+
m
i
d
a[i]+mid
a[i]+mid,找到大于这个上界的第一个数的位置
r
r
r,那么这个操作次数是
s
u
m
[
n
]
−
s
u
m
[
r
−
1
]
−
(
n
−
r
+
1
)
∗
(
a
[
i
]
+
m
i
d
)
sum[n] - sum[r-1] -(n-r+1)*(a[i]+mid)
sum[n]−sum[r−1]−(n−r+1)∗(a[i]+mid)。下面我们假设每一个数都是一个上界,然后我们找到下界,与上述同理判断操作次数是否在
k
k
k 之内,如果在表示这个极差可以达到,可以继续缩小极差,否则就增大极差。