牛客周赛 Round 79 C-小红的小球染色
C-小红的小球染色
链接:https://ac.nowcoder.com/acm/contest/100902/B
来源:牛客网
题目描述
本题与《F.小红的小球染色期望》共享题目背景,但是所求内容与范围均不同,我们建议您重新阅读题面。
有 n 个白色小球排成一排。小红每次将随机选择两个相邻的白色小球,将它们染成红色。小红将持续这个操作直到无法操作,请你计算小红操作次数可能的最小值和最大值。
输入描述:
在一行上输入一个正整数 n(1≦n≦1e9) 代表小球数量。
输出描述:
在一行上输出两个正整数,代表小红操作次数可能的最小值和最大值。
示例1
输入
3
输出
1 1
说明
在这个样例中,第一次选取,一共有两种不同的选取情况: 选中第一、二个球; 选中第二、三个球。 不管是哪一种选法,染完颜色后均无法继续操作。所以小红能且仅能操作一次,操作次数最小值为 1,最大值也为 1。
示例2
输入
4
输出
1 2
说明
在这个样例中,第一次选取,一共有三种不同的选取情况: 选中第一、二个球; 选中第二、三个球; 选中第三、四个球。 其中,第二种选取方式染色后无法继续操作;而第一、三种选取方式染色后还可以进行一次染色。
思路:
最小的情况:每 2 个红球之间有 1 个白球分隔,两端也尽量有 1 个白球。我们可以分成3个一组,每组第一个是白球,然后2个红球,可知当n%3==2 时,最后还有2个球,必须染色。
最大的情况:直接挨个染色,n//2即可。
代码:
n = int(input())
mi = 0
ma = 0
ma = n//2
if n>=4:
mi = n//3 + (n%3 == 2)
else :
mi = n//2
print(f"{mi} {ma}")
# 每 2 个红球之间有 1 个白球分隔,两端也尽量有 1 个白球。
# 1 2 3 4 5 6 7 8