トピック:https://loj.ac/problem/3093
あらゆる種類の反射光の合計、最終ショットダウンを考えてみましょう。この合計は、[i]は*ダウンライトです。
例えば、2つだけの光、第2の層は、次いで、LST、配置されている衝突\(LST「=(LST + LST *のB [2] * [1] + B LST *(B [2] * [1] B )^ 2 + ...)* [2] \)
[i]は「反射層ダウン値のI + 1の場合には、検討中の放出されたユニット出射された光まで下からi番目の層」を表し、fはオーダーを検討
\([I] = bの[I] + [I] * [I-1] F [I] +(B [I] + [I] * [I-1] F [I F ])* B [I + 1] *(B [I] + [I] * F [I-1] * [I])+ ... \)
前記\(B [I] + [i]は* [I-1] Fは[I] \)の反射光であると行きます。セット\(図示X = bの[I] + [I] * [I-1] F [I] \)
すなわち、式\(F [I] = X + X * B [I + 1] * X + ... = X \和\ limits_ {K = 0} ^ {\ inftyの}(B [I + 1] * X)^ K \)
LSTは、次にI-1は、第1の層を透過した光を表し、LSTは、[i]は*)[I-1] F =(LST + LST *のB 'i番目の層を透過した光を表し、(LSTが\' 許さ[I] \)
書式#include <cstdioを> する#include <CStringの> の#include <アルゴリズム> に#define LL長い長い 使って 名前空間はstdを、 INTのRDN() { int型 RET = 0。ブール FX = 1。チャー CH = GETCHAR()。 一方、(CH> ' 9 ' || CH < ' 0 '){ 場合(CH == ' - ')FX = 0 ; CH = GETCHAR();} 一方(CH> = ' 0 ' &&' 9 ')RET = RET * 10 + CH- ' 0 '、CH = GETCHAR()。 返す FXをRET: - ?RET; } のconst int型 N = 5E5 + 5、MOD = 1E9 + 7 。 INT UPT(INT X){ 一方(X> = MOD)X- = MOD。一方、(x < 0)、X + = MOD。戻りX;} int型 PW(int型のx、int型K) { int型 RET = 1。一方、(K){ 場合(K&1)* X%MOD RET RET =(LL); X =(LL)X * X%MOD; kは>> = 1 ;} 戻り}; RET 、INT [N F N、[N]、B [N]、 ]、ANS。 INT メイン() { N(= RDN)。int型、IV = PW(100、mod- 2 )。 以下のために(int型 i = 1 ; iが<= N; iは++ ) { [I] =(LL)RDN()* IV%MOD。 B [i]は =(LL)RDN()* IV%のMOD。 } のための(int型 I = 1を iが++; iが<= N ) { int型、X =(B [I] +(LL)[I] * I- [F 1】%MOD * [I])%のMOD。 F [I] =(LL)X * PW(UPT(1 - (LL)X *のB [I + 1 ]%のMOD)、mod- 2)%MOD。 } ANS = [ 1 ]。 以下のために(int型 iは= 2 ; iがn = <; iは++ ) ANS =(1 +(LL)B [I] * [I-F 1 ])%のMOD * ANS%MOD * [I]%MOD。 printf(" %d個の\ n " 、ANS)。 リターン 0 ; }