1053 住房空置率 (20 分)
题意描述:
在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断。判断方法如下:
-
在观察期内,若存在超过一半的日子用电量低于某给定的阈值 e,则该住房为“可能空置”;
-
若观察期超过某给定阈值 D 天,且满足上一个条件,则该住房为“空置”。
现给定某居民区的住户用电量数据,请你统计“可能空置”的比率和“空置”比率,即以上两种状态的住房占居民区住房总套数的百分比。
输入格式:
输入第一行给出正整数 N(≤1000),为居民区住房总套数;正实数 e,即低电量阈值;正整数 D,即观察期阈值。随后 N 行,每行按以下格式给出一套住房的用电量数据:
K E1 E2 ... EK
其中 K 为观察的天数,Ei 为第 i 天的用电量。
输出格式:
在一行中输出“可能空置”的比率和“空置”比率的百分比值,其间以一个空格分隔,保留小数点后 1 位。
输入样例:
5 0.5 10
6 0.3 0.4 0.5 0.2 0.8 0.6
10 0.0 0.1 0.2 0.3 0.0 0.8 0.6 0.7 0.0 0.5
5 0.4 0.3 0.5 0.1 0.7
11 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
11 2 2 2 1 1 0.1 1 0.1 0.1 0.1 0.1
输出样例:
40.0% 20.0%
(样例解释:第2、3户为“可能空置”,第4户为“空置”,其他户不是空置。)
解题思路:
Alice: 这题,看着输入怪吓人的。(;OдO)
Bob: 看题目描述的长度应该还好,我觉得这套题里面题目描述越简洁的越不好做。
Alice:又是N e D
,又是K E1 E2 EK
的,好烦
Bob:莫烦莫烦,(o・ω・)ノ(ノД
) N, e, D, K
都是参数, E1 E2 EK
是具体的数据。题目就是要我们计算E1 E2 EK
中大于e
的数量,这个数量是不是比N
的一半要大,如果是的话,那这套住房就是“可能空置”,如果这个K
比D
还大,那这套住房就是“空置”。
Alice: (¦3」∠) 晕!~ 那空置的房子岂不都是可能空置的了?
Bob: e… 好像不是啊,你看样例的输出,可能空置的比例要大于空置的比例。如果空置的都是可能空置,空置的比例肯定是大于可能空置的比例的。
Alice:对呀,那这两个应该就是没有交叉的,满足两个条件的就是空置,只满足一个条件的就是可能空置。
Bob:恩恩,也就输入复杂一点,又是整数,又是浮点的,题目本身的逻辑倒不难。
Alice: 这道题也有保留小数点后一位数字啊,会不会出现-0.00
?(⊙o⊙)…,不会不会,因为空置比例和可能空置比例都是正数。
Bob: (^U^)ノ~YO 不错呦
Alice: 那是,这种题目手到擒来~
Bob: 可喜可乐 ?
代码:
def main():
temp = [x for x in input().split()]
# 接收第一行输入的 N e D 即 居民区住房总套数;低电量阈值;即观察期阈值
N = int(temp[0])
e = float(temp[1])
D = int(temp[2])
# 按照给定的数据类型将 N e D强制转换为对应的数字
might_empty = 0
# 可能空置的房子数
empty = 0
# 空置的房子数
for x in range(N):
# 读入N 套住房的用电量数据
temp = [float(x) for x in input().split()]
# 注意这里要用float,用int的话,就会把小数点后的数字丢掉的。
K = int(temp[0])
# 第一个数字是观察的天数,根据题意,观察的天数是一个整数。
half = K / 2.0
# half是一个浮点数,题目中说“超过一半的日子”,并没有说一半的日子必须是整数。
count = 0
for ei in temp[1:]:
if ei < e:
count += 1
# 用电量低于阈值e的日子
if count > half and K > D:
# 如果这套房子 存在超过一半的日子用电量低于某给定的阈值 e
# 并且观察期超过某给定阈值 D 天
empty += 1
# 该住房为空置
elif count > half:
# 如果这套房子 只有 存在超过一半的日子用电量低于某给定的阈值 e
might_empty += 1
# 则该住房为可能空置
print("{:.1f}% {:.1f}%".format(might_empty / N * 100, empty / N * 100))
# 格式化并输出答案
if __name__ == '__main__':
main()
易错点:
- 一套住房要么是可能闲置,要么是闲置,要么是一点也不闲置。就是说不能既是闲置又是可能闲置。
- 由于可能空置和空置的比例只能是正数,所以截断的时候不会出现
- 0.00
的问题。 - 还有就是一般的日子可能是
12.5
天。
总结:
![]() | ![]() |
---|---|