[PYTHON] AtCoder Beginner Contest 167 Teilnahmebericht

AtCoder Beginner Contest 167 Teilnahmebericht

Es ist das erste Mal in den 700ern, also mag ich es nicht !!

ABC167A - Registration

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)

ABC167C - Skill Up

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)

ABC167D - Teleporter

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)

ABC167E - Colorful Blocks

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)

ABC167F - Bracket Sequencing

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

AtCoder Beginner Contest 181 Teilnahmebericht
AtCoder Beginner Contest 161 Teilnahmebericht
AtCoder Beginner Contest 151 Teilnahmebericht
AtCoder Beginner Contest 176 Teilnahmebericht
AtCoder Beginner Contest 154 Teilnahmebericht
AtCoder Beginner Contest 166 Teilnahmebericht
AtCoder Beginner Contest 153 Teilnahmebericht
AtCoder Beginner Contest 145 Teilnahmebericht
AtCoder Beginner Contest 184 Teilnahmebericht
AtCoder Beginner Contest 165 Teilnahmebericht
AtCoder Beginner Contest 160 Teilnahmebericht
AtCoder Beginner Contest 169 Teilnahmebericht
AtCoder Beginner Contest 178 Teilnahmebericht
AtCoder Beginner Contest 163 Teilnahmebericht
AtCoder Beginner Contest 159 Teilnahmebericht
AtCoder Beginner Contest 168 Teilnahmebericht
AtCoder Beginner Contest 158 Teilnahmebericht
AtCoder Beginner Contest 180 Teilnahmebericht
AtCoder Beginner Contest 156 Teilnahmebericht
AtCoder Beginner Contest 162 Teilnahmebericht
AtCoder Beginner Contest 157 Teilnahmebericht
AtCoder Beginner Contest 167 Teilnahmebericht
AtCoder Beginner Contest 179 Teilnahmebericht
AtCoder Anfängerwettbewerb 182
AtCoder Anfängerwettbewerb 146 Teilnahmebericht
AtCoder Beginner Contest 152 Teilnahmebericht
AtCoder Beginner Contest 155 Teilnahmebericht
AtCoder Beginner Contest 174 Teilnahmebericht
AtCoder Beginner Contest 171 Teilnahmebericht
AtCoder Beginner Contest 149 Teilnahmebericht
AtCoder Anfängerwettbewerb 148 Teilnahmebericht
AtCoder Beginner Contest 170 Teilnahmebericht
AtCoder Beginner Contest 183 Teilnahmebericht
AtCoder Beginner Contest # 003 Teilnahmehinweis
AtCoder Grand Contest 041 Teilnahmebericht
AtCoder Grand Contest 040 Teilnahmebericht
AtCoder Regular Contest 105 Teilnahmebericht
AtCoder Regular Contest 104 Teilnahmebericht
Eintragsdatensatz für den ACL-Anfängerwettbewerb
Atcoder Anfängerwettbewerb 146 Teilnahme Tagebuch
Teilnahmebericht des AtCoder Chokudai Contest 005
AtCoder Grand Contest 047 Teilnahmebericht
AtCoder Anfängerwettbewerb 177
AtCoder Anfängerwettbewerb 179
AtCoder Anfängerwettbewerb 172
AtCoder Anfängerwettbewerb 180
AtCoder Anfängerwettbewerb 173
Atcoder Anfänger Wettbewerb 153
Teilnahmebericht des AtCoder Acing Programming Contest 2020
Teilnahmebericht des AtCoder Keyence Programming Contest 2020
Teilnahmebericht des AtCoder Panasonic Programming Contest 2020
AtCoder Anfängerwettbewerb 152 Rückblick
AtCoder Anfängerwettbewerb 181 Hinweis
AtCoder Beginner Contest 160 Bewertung
AtCoder Anfängerwettbewerb 178 Bewertung
AtCoder Anfängerwettbewerb 180 Hinweis
AtCoder Anfängerwettbewerb 166 Bewertung
AtCoder Anfängerwettbewerb 167 Bewertung