并查集,还没有完全吃透
理下思路:
病毒是按天走的(每个人的天),所以有一个列表记录每天患病的人数(包括潜伏和感染期)然后传染的人数由变量决定,影响因素有:传染期人数,未感染剩余人,然后每次加到固定第一天的位置,然后再按天走,因为14天以后就没关系了,所以列表15就够了,在以后不用管
for _ in range(int(input())):
an=[0]*15 #14天为一个周期,超过了有抗体,不用管
res=0 #结果
x,m,n=map(int,input().split())
an[1]=1#Sumo,第一天的第一个感染者
for i in range(1,n):
if m==0:#总居民数为0 退出循环
break
tmp1 = tmp2 = 0
m -= an[13]
for j in range(13,1,-1):
an[j]=an[j-1] #过了一天
if j >= 8: #有感染力的日子
tmp1 += an[j] #记录能传播疾病的人
else: #潜伏期
tmp2+=an[j]#潜伏期的人数
an[1]=min(m-tmp1-tmp2,tmp1*x)
#新的一天,在剩余居民人口和感染人中选择最小数
# print("day", i, an)
for k in range(8,14):#具有传染力的天
res+=an[k]
print(res)
i循环,天数的循环,第一天的初始值直接有设,后面的循环都是从第二天开始的,要么从1开始,有么结束-1
for _ in range(int(input())):
an=[0]*15 #14天为一个周期,超过了有抗体,不用管
res=0 #结果
x,m,n=map(int,input().split())
an[1]=1#Sumo,第一天的第一个感染者
for i in range(n-1):
if m==0:#总居民数为0 退出循环
break
tmp1 = tmp2 = 0
m -= an[13]
for j in range(13,1,-1):
an[j]=an[j-1] #过了一天
if j >= 8: #有感染力的日子
tmp1 += an[j] #记录能传播疾病的人
else: #潜伏期
tmp2+=an[j]#潜伏期的人数
an[1]=min(m-tmp1-tmp2,tmp1*x)
#新的一天,在剩余居民人口和感染人中选择最小数
# print("day", i, an)
for k in range(8,14):#具有传染力的天
res+=an[k]
print(res)