Étant donné que seules les personnes avec une note de 1200 ou plus sont liées à la note, je pensais que 0 ne serait pas un problème, mais j'étais indigné à Pafo 915. Quand j'ai terminé 0 auparavant, c'était Pafo 339, donc c'est mieux que ça.
Je n'ai pas pu percer, certaines personnes ont dit qu'elles multiplieraient par 10 9 </ sup> sur Twitter pour savoir combien de 2 et 5 étaient inclus, et je n'ai pas compris l'explication de cette personne. Il a clignoté. C'est un nombre décimal, donc 2 et 5 devraient être suffisants. 2.4 qui apparaît dans l'exemple d'entrée, mais bien sûr si vous le multipliez par 10, cela devient un entier, mais même si vous le multipliez par 1,25, cela devient un entier. En bref, 2 2 </ sup> × 3 × 5 -1 </ sup>, donc si vous annulez même 5 -1 </ sup>, jusqu'à 2 -2 </ sup> Une fois que vous savez cela, découvrez quelles puissances 2 et 5 sont pour chaque A i </ sub>, et si la somme des multiplicateurs de 2 et 5 pour chaque combinaison est égale ou supérieure à 0, alors un entier. Le nombre total de combinaisons de 2 et 5 n'est pas si grand, et * O * ( N </ i> 2 </ sup>) suffit.
def conv(s):
if s.find('.') == -1:
s += '.'
s = s.rstrip('0')
t = len(s) - s.find('.') - 1
a = int(s.replace('.', ''))
if a == 0:
return (0, 0)
x, y = -t, -t
while a % 5 == 0:
x += 1
a //= 5
while a % 2 == 0:
y += 1
a //= 2
return (x, y)
N, *A = open(0).read().split()
N = int(N)
d = {}
for a in A:
t = conv(a)
d.setdefault(t, 0)
d[t] += 1
result = 0
xs = list(d.keys())
for i in range(len(xs)):
x, y = xs[i]
t = d[xs[i]]
if x >= 0 and y >= 0:
result += t * (t - 1) // 2
for j in range(i + 1, len(xs)):
m, n = xs[j]
if x + m >= 0 and y + n >= 0:
result += t * d[xs[j]]
print(result)
Recommended Posts