Es ist das erste Mal in den 700ern, also mag ich es nicht !!
Brechen Sie in 2 Minuten durch. Schreiben Sie einfach.
S = input()
T = input()
if S == T[:-1]:
print('Yes')
else:
print('No')
ABC167B - Easy Linear Programming
Durchbruch in dreieinhalb Minuten. Summe (([0] * A + [1] * B + [-1] * C) [: K])
K ≤ 2 × 10 Ich bemerkte 9 </ sup>. Was für eine Zeitverschwendung.
A, B, C, K = map(int, input().split())
result = 0
t = min(A, K)
result += t
K -= t
t = min(B, K)
K -= t
t = min(C, K)
result -= t
print(result)
Es brach in achteinhalb Minuten durch. Es stellte sich heraus, dass es eine etwas vollständige Suche mit dem C-Problem war !?
N, M, X = map(int, input().split())
C = []
A = []
for i in range(N):
t = list(map(int, input().split()))
C.append(t[0])
A.append(t[1:])
result = -1
for i in range(1 << N):
t = [0] * M
c = 0
for j in range(N):
if (i >> j) & 1 == 0:
continue
c += C[j]
for k in range(M):
t[k] += A[j][k]
if all(x >= X for x in t):
if result == -1:
result = c
else:
result = min(result, c)
print(result)
Brechen Sie in 13 Minuten durch. K ≤ 10 18 </ sup>, damit Sie nicht K-mal abbiegen können, aber N ≤ 2 x 10 5 </ sup>, damit Sie N-mal abbiegen können. Anzahl der Städte Da es N Teile gibt, wird es immer innerhalb von N-mal wiederholt, sodass Sie die Länge einer Schleife kennen. Wenn Sie das wissen, können Sie antworten, indem Sie K durch diese Länge dividieren und drehen.
N, K = map(int, input().split())
A = [int(a) - 1 for a in input().split()]
if K <= N:
p = 0
for i in range(K):
p = A[p]
print(p + 1)
exit()
p = 0
t = [-1] * N
t[0] = 0
for i in range(1, N):
p = A[p]
if t[p] != -1:
break
t[p] = i
d = i - t[p]
K -= i
K %= d
for i in range(K):
p = A[p]
print(p + 1)
Durchbruch in 25 Minuten. TLE1 in Python. Keiner der gleichen Farbe grenzt an die Straße M × (M -1) N -1 </ sup>. Nur ein Ort grenzt an M × 1 × (M ―― 1) N - 2 </ sup> × N-1 </ sub> C 1 </ sub> Wenn Sie es als n Stellen betrachten, sind die Farben nebeneinander. M × (M ―― 1) N -1 - n </ sup> × N-1 </ sub> C n </ sub>. Danach einfach schleifen und addieren. Ich glaube, weil ich 5 Stunden lang bei No.1035 Color Box von yukicoder gestöhnt habe, konnte ich es schnell lösen.
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
const (
p = 998244353
)
var (
fac []int
)
func mpow(x int, n int) int {
result := 1
for n != 0 {
if n&1 == 1 {
result = result * x % p
}
x = x * x % p
n >>= 1
}
return result
}
func mcomb(n int, k int) int {
if n == 0 && k == 0 {
return 1
}
if n < k || k < 0 {
return 0
}
return (fac[n] * mpow(fac[n-k], p-2) % p) * mpow(fac[k], p-2) % p
}
func main() {
defer flush()
N := readInt()
M := readInt()
K := readInt()
fac = make([]int, N+1)
fac[0] = 1
for i := 0; i < N; i++ {
fac[i+1] = fac[i] * (i + 1) % p
}
result := 0
for i := 0; i < K+1; i++ {
t := M * mcomb(N-1, i)
t %= p
t *= mpow(M-1, N-1-i)
t %= p
result += t
result %= p
}
println(result)
}
const (
ioBufferSize = 1 * 1024 * 1024 // 1 MB
)
var stdinScanner = func() *bufio.Scanner {
result := bufio.NewScanner(os.Stdin)
result.Buffer(make([]byte, ioBufferSize), ioBufferSize)
result.Split(bufio.ScanWords)
return result
}()
func readString() string {
stdinScanner.Scan()
return stdinScanner.Text()
}
func readInt() int {
result, err := strconv.Atoi(readString())
if err != nil {
panic(err)
}
return result
}
var stdoutWriter = bufio.NewWriter(os.Stdout)
func flush() {
stdoutWriter.Flush()
}
func printf(f string, args ...interface{}) (int, error) {
return fmt.Fprintf(stdoutWriter, f, args...)
}
func println(args ...interface{}) (int, error) {
return fmt.Fprintln(stdoutWriter, args...)
}
Nachtrag: Ich habe es auch in Python bestanden.
N, M, K = map(int, input().split())
result = 0
n = 1
k = 1
for i in range(K + 1):
result += n * pow(k, 998244353 - 2, 998244353) * pow(M - 1, N - 1 - i, 998244353)
result %= 998244353
n *= N - 1 - i
n %= 998244353
k *= i + 1
k %= 998244353
result *= M
result %= 998244353
print(result)
Ich konnte nicht durchbrechen.
Nachtrag: Ich habe versucht, es wie im Erklärungsvideo gezeigt zu lösen, aber es war mühsam, die Liste in positive und negative zu unterteilen, also habe ich sie mit der Sortiertastenfunktion verarbeitet.
def scan(s):
m = 0
a = 0
for c in s:
if c == '(':
a += 1
elif c == ')':
a -= 1
m = min(m, a)
return m, a
def custom_key(v):
m, a = v
if a >= 0:
return 1, m, a
else:
return -1, a - m, a
N = int(input())
S = [input() for _ in range(N)]
c = 0
for m, a in sorted([scan(s) for s in S], reverse=True, key=custom_key):
if c + m < 0:
c += m
break
c += a
if c == 0:
print('Yes')
else:
print('No')
Recommended Posts