위험한 바이러스가 있고 빠르게 성장한다고 가정합니다. 인자 x에 의해 성장할 바이러스 세포의 수가 0.5이고 인자 y에 의해 성장할 바이러스 세포의 수가 0.5이다. 이제 처음에 단일 바이러스 세포가 있었다면 t 시간 이후에 예상되는 바이러스 세포 수를 계산하십시오. 답이 너무 크면 mod 결과는 10^9+7입니다.
따라서 입력이 x =2, y =4, t =1과 같으면 출력은 3이 됩니다. 처음에는 바이러스에 하나의 세포만 있기 때문입니다. x 시간 후 확률 0.5로 크기가 두 배로 증가하고(x2) 다른 확률이 0.5이면 크기가 4배 증가합니다. 따라서 시간 t =1 이후 예상되는 바이러스 세포 수는 0.5*2*1 + 0.5*4*1 =3입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- m =10^9+7
- 인자 :=(x+y)/2의 바닥
- res:=1
- t> 0일 때 수행
- t가 홀수이면
- res :=(res*factor) 모드 m
- 인자 :=(인자*인자) 모드 m
- t :=t/2의 바닥
- t가 홀수이면
- 반환 결과
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
m=10**9+7 def solve(x, y, t): factor=(x+y)//2 res=1 while t > 0: if t % 2: res = (res*factor) % m factor = (factor*factor) % m t = t// 2 return res x = 2 y = 4 t = 1 print(solve(x, y, t))
입력
2, 4, 1
출력
3