Ich habe am Yuki Coder 247 teilgenommen (https://yukicoder.me/contests/262). Ich konnte nur bis zu C innerhalb der Zeit lösen, aber nach dem Ende habe ich bis zu D gelöst, also werde ich bis zu D setzen.
A Wenn es positive Früchte gibt, sortieren Sie sie und ordnen Sie die positiven. Wenn Sie nur negative haben, können Sie eine der frischesten negativen auswählen.
# A
N, K = list(map(int, input().split()))
As = list(map(int, input().split()))
positives = [a for a in As if a >= 0]
negatives = [a for a in As if a < 0]
if positives:
selected = sorted(positives)
else:
selected = [sorted(negatives)[-1]]
selected = selected[-min(K, len(selected)):]
print(sum(selected))
B Wenn $ N_0 = 0, N_ {i + 1} = AN_i + B $ und $ N_ {n} = 0 $, finden Sie die Mindestanzahl von Schritten $ n $. Dies ist $ N_ {n + 1} = \ sum_ {i = 1} ^ n A ^ i B = \ frac {1-A ^ {n + 1}} {1-A} B $, also $ B. Es kann nur gesehen werden, wenn = 0 $ oder $ A = -1 $.
# B
A, B = list(map(int, input().split()))
if B == 0:
print(1)
elif A == -1:
print(2)
else:
print(-1)
C Finden Sie heraus, ob Sie in einer der folgenden Situationen stecken bleiben:
1 kann ein beliebiger Unterschied zwischen dem ganzzahligen Teil von $ RK / M $ und dem ganzzahligen Teil von $ LK / M $ sein, der 1 oder mehr ist, oder $ R $ oder $ L $ ist ein Vielfaches von $ M $. Der Grund dafür, dass der Unterschied mehr als 1 beträgt, ist zu berücksichtigen, wenn der Unterschied zwischen $ LK $ und $ RK $ weniger als $ M $ beträgt.
# C
L, R, M, K = list(map(int, input().split()))
if R * K // M - L * K // M >= 1 or R * L % M == 0 or K == 0:
print('Yes')
else:
print('No')
D Sei $ z_i $ die Zahl, wenn sie zum $ i $ -ten Zeitpunkt Null ist, und $ n_i $, wenn sie nicht Null ist. In diesem Fall kann die folgende allmähliche Gleichung erstellt werden.
\displaystyle{
\begin{aligned}
z_{i+1} &= (P+1)z_i + 2 n_i, \\
n_{i+1} &= (P-1)z_i + 2(P-1)n_i.
\end{aligned}
}
Über die Update-Formel von $ z_i $ --1 Artikel: Gesamt $ P + 1 $ wie unten
# D
P, K = list(map(int, input().split()))
mod = 10**9 + 7
z_i, n_i = 1, 0
for i in range(K):
z_i, n_i = (P + 1) * z_i + 2 * n_i, (P - 1) * z_i + 2 * (P - 1) * n_i
z_i, n_i = z_i % mod, n_i % mod
print(z_i)
Recommended Posts