[PYTHON] AtCoder Beginner Contest 145 Teilnahmebericht

AtCoder Beginner Contest 145 Teilnahmebericht

ABC145A - Circle

Brechen Sie in 1 Minute durch. Schreiben Sie einfach.

r = int(input())

print(r * r)

ABC145B - Echo

Brechen Sie in dreieinhalb Minuten durch. Stellen Sie einfach sicher, dass Sie eine gleichmäßige Länge haben.

from sys import exit

N = int(input())
S = input()

if N % 2 == 1:
    print('No')
    exit()

if S[:N // 2] == S[N // 2:]:
    print('Yes')
else:
    print('No')

ABC145C - Average Length

Es brach in 8 Minuten durch. Ich dachte, ich sollte die Gesamtdistanz aller Kombinationen mitteln, und als ich es schrieb, bestand das Eingabebeispiel. Als ich es einreichte, kam AC heraus, aber als ich die Erklärung las, passierte es nur durch einen Zufall. ..

from math import sqrt

N = int(input())
xy = [list(map(int, input().split())) for _ in range(N)]

result = 0
for i in range(N):
    for j in range(N):
        if i != j:
            result += sqrt((xy[i][0] - xy[j][0]) * (xy[i][0] - xy[j][0]) + (xy[i][1] - xy[j][1]) * (xy[i][1] - xy[j][1]))
print(result / N)

ABC145D - Knight

Durchbruch in 85 Minuten. RE4 WA1, aber kaum eineinhalb Minuten vor dem Ende des Wechselstroms. Der Speicher läuft über, wenn zum ersten Mal versucht wird, DP zu verwenden. Die Berechnungszeit läuft über, wenn das Array auf zirkuläre Verwendung umgestellt wird. In diesem Modus wird die Richtlinie als schlecht eingestuft. X, Y. Wenn Sie sich die DP-Tabelle ansehen, wenn sie klein ist, werden Sie feststellen, dass es zu wenige Quadrate mit Werten gibt und es nur ein Muster für jede der beiden Bewegungen gibt, wenn Sie zu X, Y gelangen. Lösen der simultanen Gleichungen, `a = (2 · Y - X) / 3, b = (2 · X - Y) / 3 ', und die zu erhaltende Lösung ist a + b </ sub> C min (a ,, b) </ sub> ist erreicht. Im Kommentarvideo beim Lösen von ABC132D - Blau und rote Kugeln, Herr Sunuke Sagte so etwas wie "Pascals Dreieck kann verwendet werden, weil der Wert dieses Mal klein ist". Als ich also googelte, weil es Fermats Theorem gab, kam eine C ++ - Implementierung heraus und ich portierte es nach Python. Es war in Bezug auf die Geschwindigkeit völlig nutzlos. Als ich es auf Go neu portierte und einreichte, war es etwas später mit 2 REs. Ich dachte, dass der Index nicht im Weg war, vergrößerte das Slice und reichte es 2 weitere REs ein, und es wurde ruhig. Zu diesem Zeitpunkt habe ich 99999 3 ausprobiert und festgestellt, dass b negativ ist. Wenn es negativ ist, habe ich es auf Ausgabe 0 korrigiert und gesendet ... Dann blieb die Debug-Ausgabe erhalten und WA orz. Löschen Sie sie und geben Sie sie erneut aus. AC. Der Grund, warum sich die Variablennamen völlig von den üblichen unterscheiden, ist, dass ich keine Zeit hatte, den Portcode auf meine eigene Weise zu korrigieren ...

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

const (
	M = 1000000007
)

var (
	fac  []int
	ifac []int
)

func min(x, y int) int {
	if x < y {
		return x
	}
	return y
}

func mpow(x int, n int) int {
	ans := 1
	for n != 0 {
		if n&1 == 1 {
			ans = ans * x % M
		}
		x = x * x % M
		n = n >> 1
	}
	return ans
}

func comb(a int, b int) int {
	if a == 0 && b == 0 {
		return 1
	}
	if a < b || a < 0 {
		return 0
	}
	tmp := ifac[a-b] * ifac[b] % M
	return tmp * fac[a] % M
}

func main() {
	X := readInt()
	Y := readInt()

	if (X+Y)%3 != 0 {
		fmt.Println(0)
		return
	}

	fac = make([]int, 666667)
	ifac = make([]int, 666667)

	a := (2*Y - X) / 3
	b := (2*X - Y) / 3

	if a < 0 || b < 0 {
		fmt.Println(0)
		return
	}

	fac[0] = 1
	ifac[0] = 1
	for i := 0; i < 666666; i++ {
		fac[i+1] = fac[i] * (i + 1) % M
		ifac[i+1] = ifac[i] * mpow(i+1, M-2) % M
	}

	fmt.Println(comb(a+b, min(a, b)) % M)
}

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
}

Nachtrag: In Python umgeschrieben.

p = 1000000007

X, Y = map(int, input().split())

if (X + Y) % 3 != 0:
    print(0)
    exit()

a = (2 * Y - X) // 3
b = (2 * X - Y) // 3

if a < 0 or b < 0:
    print(0)
    exit()

n = a + b
fac = [0] * (n + 1)
fac[0] = 1
for i in range(n):
    fac[i + 1] = fac[i] * (i + 1) % p


def mcomb(n, k):
    if n == 0 and k == 0:
        return 1
    if n < k or k < 0:
        return 0
    return fac[n] * pow(fac[n - k], p - 2, p) * pow(fac[k], p - 2, p) % p


print(mcomb(n, a))

ABC145E - All-you-can-eat

Ich kann nicht einmal anfangen. Es ist ein Rucksack, aber es ist möglich, nur einen Schuss herauszuhalten. Die Kombination, die den Regeln entspricht, bleibt gemäß den Regeln, auch wenn diejenige, die am längsten dauert, durch die letzte ersetzt wird, aber das Gegenteil ist nicht immer der Fall. Das ist nicht der Fall, also ist es besser, die Zeit zu verschieben, die zum Essen benötigt wird, damit Sie mehr essen können. Daher können Sie sortieren und DP in der Reihenfolge der Zeit, die zum Essen benötigt wird. Ich persönlich denke, es ist einfacher als das D-Problem.

def main():
    N, T = map(int, input().split())
    AB = [list(map(int, input().split())) for _ in range(N)]

    dp = [-1] * (T + 3000)
    dp[0] = 0
    for a, b in sorted(AB):
        for i in range(T - 1, -1, -1):
            if dp[i] == -1:
                continue
            if dp[i + a] < dp[i] + b:
                dp[i + a] = dp[i] + b
    print(max(dp))


main()

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 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 164 Teilnahmebericht
AtCoder Beginner Contest 168 Teilnahmebericht
AtCoder Beginner Contest 150 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 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 179
AtCoder Anfängerwettbewerb 180
AtCoder Anfängerwettbewerb 173
Atcoder Anfänger Wettbewerb 153
Teilnahmebericht des AtCoder HHKB Programmierwettbewerbs 2020
Teilnahmebericht des AtCoder Acing Programming Contest 2020
Teilnahmebericht des AtCoder Keyence Programming Contest 2020
Teilnahmebericht des AtCoder Panasonic Programming Contest 2020
AtCoder Anfängerwettbewerb 181 Hinweis
AtCoder Anfängerwettbewerb 166 Bewertung
AtCoder Anfängerwettbewerb 167 Bewertung
Teilnahmebericht zum AtCoder Library Practice Contest (Python)
AtCoder Anfängerwettbewerb 182 Hinweis
AtCoder Beginner Contest 164 Bewertung
AtCoder Beginner Contest 169 Bewertung
AtCoder Beginner Contest 181 Bewertung
AtCoder Beginner Contest 171 Bewertung