Dernière fois Résoudre 5 problèmes de Boot Camp
#44 ABC056-C
** Pensées ** La somme des entiers non négatifs jusqu'à i est $ \ frac {1} {2} n (n + 1) $}}. Cette somme devient $ X $ lorsque $ \ frac {1} {2} n (n + 1) = X $, et lors de la résolution de $ n $, $ n = \ frac {-1 \ pm { \ sqrt {8X + 1}}} {2} $. L'ajout du symbole ceil à la solution de cette équation donne $ \ lceil \ frac {-1 \ pm {\ sqrt {8X + 1}}} {2} \ rceil $. Voilà la réponse.
import math
x = int(input())
f = (-1+math.sqrt(8*x+1)) / 2
print(math.ceil(f))
** Pensées ** Si vous inversez chaque opération, vous mourrez, utilisez donc booléen pour gérer si elle est inversée. Nous utilisons deque car nous n'accédons qu'aux côtés gauche et droit des données. Il ne vous reste plus qu'à mettre en œuvre l'opération
from collections import deque
n = int(input())
a = list(input().split())
b = deque([])
r = False
for i in range(n):
if r:
b.appendleft(a[i])
else:
b.append(a[i])
r = not r
if r:
b = reversed(b)
ans = ' '.join(b)
print(ans)
** Pensées ** Tout d'abord, considérez combien de scc peuvent être créés sans synthétiser c en s. Le scc qui peut être créé sans synthétiser c en s est $ min (N, M // 2) $. Ensuite, considérons le cas du compositing. Lorsqu'ils sont combinés, deux c deviennent un s, donc si vous voulez faire s à partir de c, vous avez besoin de quatre cs. Tout ce que vous avez à faire est de le mettre en œuvre.
n, m = map(int,input().split())
if m - 2 * n >= 0: #Si le scc peut être fait sans synthétiser
ans = n + (m-2*n)//4
print(ans)
else:
print(m//2)
** Pensées ** Si le point à diviser est au centre, il existe d'innombrables méthodes de division. En outre, la plus petite zone une fois divisée représente la moitié du total.
w, h, x, y = map(int,input().split())
s = w * h / 2
if 2*x == w and 2*y == h:
print(s,1)
else:
print(s,0)
** Pensées ** Compter l'élément $ A_i $ sera probablement TLE, donc nous le compterons d'une manière différente. Il est implémenté par tri et comptage par délimiteur de valeur. S'il y a 4 côtés les plus longs ou plus, le carré qui peut être fait de ces côtés sera le maximum. Sinon, ce sera un rectangle avec deux premiers côtés et deux seconds côtés.
n = int(input())
a = list(map(int,input().split()))
a.sort(reverse=True)
c = 0
v = []
for i in range(n-1):
if a[i] != a[i+1]:
c += 1
if c >= 2: #Ajouter uniquement lorsqu'il y a deux côtés ou plus
v.append([a[i],c])
c = 0
else:
c += 1
if a.count(a[-1]) >=2:
v.append([a[-1],a.count(a[-1])])
if len(v) == 0: #Si v est vide, vous ne pouvez pas faire de carré
print(0)
elif v[0][1] >= 4: #Devenir un carré
print(v[0][0]**2)
elif len(v) >= 2: #Rectangle
print(v[0][0]*v[1][0])
Cela suffit à résoudre. à plus,
Recommended Posts