AtCoder ABC 182 Python (A ~ D)

Sommaire

A, B, C résolus. D est un pas de plus. E lisez simplement la phrase du problème en un rien de temps, mais c'était un problème étonnamment simple, donc il aurait peut-être été bon de résoudre E en premier.

problème

https://atcoder.jp/contests/abc182

A. twiblr image.png

Répondre
A, B = map(int, input().split())

max_follow = 2 * A + 100
answer = max_follow - B
print(answer)

Écrivez simplement ceci.

B. Almost GCD image.png

Répondre
N = int(input())
A = list(map(int, input().split()))

max_gcd = 0
answer = 0
for i in range(2, 1000+1):
    count = 0
    for a in A:
        if a % i == 0 and a >= i:
            count += 1
    if count >= max_gcd:
        answer = i
        max_gcd = count

print(answer)

C'est aussi fondamentalement juste écrit, mais l'implémentation est un peu compliquée pour le problème B.

C. To 3 image.png

Répondre
from itertools import combinations

N = list(map(int, str(int(input()))))
k = len(N)

for i in reversed(range(1, k+1)):
    for C in combinations(N, i):
        if sum(C) % 3 == 0:
            print(k - i)
            exit()

print(-1)

Pour les nombres multiples de 3, vous pouvez tester si la somme de chaque chiffre est un multiple de 3. Puisque vous pouvez essayer toutes les méthodes d'une manière contrainte, sélectionnez un nombre arbitraire de chaque chiffre de la combinaison et essayez si la somme peut être divisée par 3.

D. Wandering image.png

Réponse (2 WA)
import numpy as np

N = int(input())
A = np.array(list(map(int, input().split())))
cumA = np.cumsum(A)
cumA = np.append(cumA, 0)

now = 0
max_list = []
max_point = 0
max_index = 0
for i, cum_a in enumerate(cumA):
    now += cum_a
    if now >= max_point:
        max_point = now
        max_index = i
        max_list.append((max_point, max_index))

use_max_index = []
for point, index in max_list:
    if point == max_point:
        use_max_index.append(index)


answer = 0
for max_index in use_max_index:
    # max_index et max_index+Considérez 1 et adoptez le plus grand
    # max_Lors de l'utilisation d'index
    answer_1 = max_point - cumA[max_index-1]
    count = 0
    add_amount = 0
    for i in range(max_index):
        count += A[i]
        add_amount = max(add_amount, count)

    answer_1 += add_amount

    # max?index+Lors de l'utilisation de 1
    answer_2 = max_point
    count_2 = 0
    add_amount_2 = 0
    if max_index <= N-1:
        for i in range(max_index+1):
            count_2 += A[i]
            add_amount_2 = max(add_amount_2, count_2)

        answer_2 += add_amount_2

    answer = max(answer, answer_1, answer_2)

print(answer)

J'ai réfléchi trop fort, le code est devenu long et je n'ai pas pu obtenir deux WA.

Réponse (AC à une date ultérieure)
N = int(input())
A = list(map(int, input().split()))

cumA = A[:]
for i in range(1, N):
    cumA[i] += cumA[i-1]

max_cumA = cumA[:]
for i in range(1, N):
    max_cumA[i] = max(max_cumA[i], max_cumA[i-1])

now_point = 0
max_point = 0
for i in range(N):
    max_point = max(max_point, now_point + max_cumA[i])
    now_point += cumA[i]

print(max_point)

Ce problème est facile sans tenir compte des contraintes, mais il était difficile en termes de réduction de la quantité de calcul. Je me suis vite rendu compte que la politique de réduction du montant du calcul était la somme cumulative, mais je n'ai pas pu la résoudre car j'étais confuse en chemin.

Si tu penses calmement,

  1. Prenez la somme cumulée (cumA)
  2. Prenez une liste de max jusqu'à chaque indice de somme cumulée (max_cumA)
  3. Utilisez max_cumA pour mettre à jour la portée maximale (max_point)

Je l'ai finalement résolu proprement. Je pensais que le but de ce problème était de "prendre une autre idée après avoir pris la somme cumulée".

Recommended Posts

AtCoder ABC 182 Python (A ~ D)
Résoudre AtCoder ABC168 avec python (A ~ D)
AtCoder ABC 177 Python (A ~ E)
AtCoder ABC 178 Python (A ~ E)
AtCoder ABC 176 Python (A ~ E)
AtCoder ABC 174 Python
AtCoder ABC 175 Python
Résoudre ABC166 A ~ D avec Python
Modèle AtCoder ABC 179 Python (A ~ E)
[AtCoder] Résoudre ABC1 ~ 100 Un problème avec Python
Résoudre ABC165 A, B, D avec Python
[AtCoder] Résoudre un problème de ABC101 ~ 169 avec Python
Défiez AtCoder (ABC) 164 avec Python! Un problème ~ C
Résolvez AtCoder ABC166 avec python
Atcoder ABC164 A-C en Python
Atcoder ABC167 A-D en Python
Résoudre ABC175 D en Python
Atcoder ABC165 A-D en Python
Atcoder ABC166 A-E en Python
Atcoder ABC169 A-E en Python
AtCoder ABC177 A-D avec python
atCoder 173 Python
Résoudre Atcoder ABC176 (A, B, C, E) en Python
AtCoder ABC177
[Explication AtCoder] Contrôlez les problèmes A, B, (C), D de ABC165 avec Python!
[Explication AtCoder] Contrôlez les problèmes A, B, C, D d'ABC183 avec Python!
[Explication AtCoder] Contrôlez les problèmes A, B, C, D d'ABC181 avec Python!
Résoudre ABC163 A ~ C avec Python
Explication ABC127 A, B, C (python)
ABC166 en Python A ~ C problème
Résoudre Atcoder ABC169 A-D avec Python
Résoudre ABC168 A ~ C avec Python
Résoudre ABC036 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
ABC128 Commentaire A, B, C (python)
Résoudre ABC158 A ~ C avec Python
Explication ABC126 A, B, C (python)
Résoudre ABC037 A ~ C avec Python
[Python] Maintenant un codeur vert ~ [AtCoder]
AtCoder ABC155 Problème D Pairs Review Note 2 NumPy et Python
Résolution avec Ruby et Python AtCoder ABC178 D Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ABC151 D Recherche de priorité de largeur
Résolution avec Ruby et Python AtCoder ABC133 D Somme cumulée
[Explication AtCoder] Contrôle ABC158 Problèmes A, B, C avec Python!
Résolution avec Ruby et Python AtCoder ABC138 D Liste adjacente
AtCoder ABC168 Une expression de cas résolue en Ruby et Python
[Explication AtCoder] Contrôle ABC164 Problèmes A, B, C avec Python!
[Explication AtCoder] Contrôle ABC168 Problèmes A, B, C avec Python!
Débutant ABC154 (Python)
Débutant ABC156 (Python)
Résoudre ABC175 A, B, C avec Python
Atcoder ABC60 D - Solution séparée de sac à dos simple
ABC 157 D - Résolvez les suggestions d'amis en Python!
[Python] [Explication] Concours DP typique d'AtCoder: un concours
Mémo Atcoder débutant Python @ Keyence 2020, problème ABC