Résolvez AtCoder 167 avec python

Je ne pouvais résoudre que jusqu'à D à temps. .. .. Après cela, j'ai cherché sur Google et j'ai fait référence aux codes des autres et j'ai terminé la course à F.

A Comparez la partie de la chaîne T excluant le dernier caractère avec S.

# A

S = input()
T = input()
T = T[:len(S)]
print('Yes' if T == S else 'No')

B Prenez autant de cartes A que vous pouvez, puis B autant que vous le pouvez et C si vous ne pouvez toujours pas atteindre K.

# B

A, B, C, K = list(map(int, input().split()))

score = 0
if K <= A:
    score = K
    print(score)
    exit()

score += A
K -= A
if K <= B:
    print(score)
    exit()

K -= B
print(score - K)

C Puisque le nombre maximum de modèles est de 2 $ ^ {12} = 4096 $, il est suffisant de vérifier tous les modèles avec python. Code très fou.

# C

N, M, X = list(map(int, input().split()))
CAs = [list(map(int, input().split())) for i in range(N)]

import numpy as np
Cs = np.array([ca[0] for ca in CAs])
As = [np.array(ca[1:]) for ca in CAs]

import itertools
states = list(itertools.product([True, False], repeat=N))

def compute(state):
    arr = np.array([0] * M)
    for i in range(N):
        arr += As[i] * state[i]
    price = (Cs * state).sum() if ((arr >= X).sum() == M) else -1
    return price


res = np.array(list(map(compute, states)))
res = res[res > 0]
print(min(res) if len(res) > 0 else -1)

D Il y a toujours une boucle, alors vérifiez la taille de la boucle et soustrayez le montant approprié du nombre de fois où vous utilisez le téléporteur $ K $. Cette déduction appropriée a pris du temps et je n'ai pas pu entrer dans le problème E. .. ..

# D

N, K = list(map(int, input().split()))
As = list(map(int, input().split()))

def compute(city, K):
    for i in range(K):
        city = As[city-1]
    print(city)

cities_visited = [False] * N
i = 0
city = 1
city_visited_time = {}

while not cities_visited[city - 1]:
    cities_visited[city - 1] = True
    city_visited_time[city-1] = i
    city = As[city-1]
    i += 1

loop_start = city_visited_time[city-1]
loop_end = i


div = (K - loop_start) // (loop_end - loop_start)
if K - loop_start < 0 or div == 0:
    compute(1, K)
else:
    compute(city, K - loop_start - div * (loop_end - loop_start))

E La fonction objectif est la suivante.

\sum_{n=0}^K M (M-1) ^{N-1-n} {}_{N-1} C _n

$ n $ est le nombre de paires adjacentes de blocs de la même couleur. Par exemple, si $ n = 0 $, les couleurs de tous les blocs adjacents seront différentes. Dans ce cas, le bloc le plus à gauche peut être sélectionné librement en fonction de $ M $, et le bloc de droite doit être sélectionné différemment de la gauche, de sorte que $ M-1 $ peut être sélectionné. En considérant cela pour tous les blocs, $ n = Quand il vaut 0 $, il devient $ M (M-1) ^ {N-1} $. Lorsque $ n = 1 $, si un ensemble est considéré ensemble, il peut être calculé de la même manière que lorsque $ n = 0 $ est considéré pour des blocs $ N-1 $.

Si la fonction objectif est calculée telle quelle, elle devient TLE ou MLE. Par conséquent, j'utilise le théorème de Fermat comme technique (lien de référence).

# E

N, M, K = list(map(int, input().split()))
p = 998244353

comb = 1
res = 0
for n in range(K+1):
    res = (res + comb * M * pow(M-1, N-1-n, p)) % p
    comb = (comb * (N -1 -n) * pow(n + 1, p - 2, p)) % p
    
print(res)

F Veuillez regarder la vidéo du commentaire tel quel. .. .. Remplacez (,) par ± nombres et enregistrez la somme et le minimum pour chaque requête. À quoi penser

Ce dernier est, par exemple, ())) ((Une requête comme (la somme est +1 mais la valeur minimale est -2, donc vous ne pouvez pas créer une chaîne de parenthèses sans deux ou plus (à gauche).

# F

N = int(input())

list_plus = []
list_minus = []
for i in range(N):
    S = input()
    state = 0
    min_state = 0
    for s in S:
        if s == '(':
            state += 1
        else:
            state -= 1
        min_state = min(min_state, state)
    
    if state > 0:
        list_plus.append((min_state, state))
    else:
        list_minus.append((min_state - state, -state))

def compute(arr):
    total_state = 0
    for min_state, state in arr[::-1]:
        if total_state + min_state < 0:
            print('No')
            exit()
        total_state += state
    return total_state

list_plus.sort()
total_state_plus = compute(list_plus)
list_minus.sort()
total_state_minus = compute(list_minus)

print('Yes' if total_state_plus == total_state_minus else 'No')

Impressions

Quand j'ai utilisé append ((min_state, state)) dans le code du problème F, j'ai obtenu TLE lorsque j'ai utilisé append ([min_state, state]). Il y avait une description de cela dans le chapitre 3 de Python haute performance, mais c'était une bonne occasion de se rendre compte que la vitesse changera considérablement.

Recommended Posts

Résolvez AtCoder 167 avec python
Recommandation de résolution des problèmes d'AtCoder avec python (20200517-0523)
Résoudre des maths avec Python
Résolvez POJ 2386 avec python
[AtCoder] Résoudre ABC1 ~ 100 Un problème avec Python
Résoudre AtCoder ABC168 avec python (A ~ D)
[Python] Résoudre des équations avec sympy
[AtCoder] Résoudre un problème de ABC101 ~ 169 avec Python
Bleu clair avec AtCoder @Python
atCoder 173 Python
Résolvez "AtCoder version! Arimoto (Débutant)" avec Python!
solveur> Lien> Résoudre le solveur Excel avec python
Résoudre ABC166 A ~ D avec Python
Résoudre Atcoder ABC169 A-D avec Python
Résoudre ABC168 A ~ C avec Python
Résolu AtCoder ABC 114 C-755 avec Python3
Résoudre ABC162 A ~ C avec Python
Résoudre ABC167 A ~ C avec Python
Résoudre ABC158 A ~ C avec Python
Statistiques avec python
Grattage avec Python
AtCoder ABC 174 Python
Python avec Go
Résolution avec Ruby et Python AtCoder ABC133 D Somme cumulée
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
AtCoder ABC 175 Python
Résoudre les problèmes d'AtCoder Boot camp pour les débutants (moyen 100) avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Je voulais résoudre ABC160 avec Python
[Python] Résolvez 10 problèmes d'élite passés d'Atcoder
Solve Lake Counting (POJ n ° 2386) avec Python3
Je voulais résoudre ABC172 avec Python
AtCoder ARC104 B Somme cumulative résolue en Ruby, Python et Java
AtCoder # 2 tous les jours avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Grattage en Python (préparation)
Jeu à la main en Python (commençons avec AtCoder?)
Daily AtCoder # 53 en Python
Essayez de gratter avec Python.
Daily AtCoder # 33 en Python
Résoudre ABC168D en Python
Apprendre Python avec ChemTHEATER 03