[PYTHON] Examen des questions passées d'AtCoder (12 / 6,7)

Je garderai une trace des problèmes que j'ai commis une erreur dans les questions passées d'AtCoder et des problèmes qui m'ont laissé une impression.

ABC102-C (Linear Approximation)

6WA, j'ai vu la réponse

Tout d'abord, définissez $ B_i = A_i-i $, puis regardez la séquence entière de $ B_i $ dans l'ordre de l'avant, et lorsque vous êtes entre $ B_i-i et B_ {i + 1} - (i + 1) $ Je me suis demandé si ce serait la valeur minimale dans l'ordre, mais j'ai vu la réponse parce que la classification des cas de la frontière ne se passait pas bien et c'était WA tout le temps. (Je voudrais AC cette méthode dans un proche avenir.) ** La valeur minimale de la somme des valeurs absolues a été écrite dans la réponse comme valeur médiane **, mais je ne pouvais pas bien la comprendre, donc je l'ai comprise en dessinant la figure ci-dessous. (Lorsque la longueur de la chaîne entière est 5) IMG_0092.PNG La partie rouge est plus comptée que lorsque la valeur médiane est b, mais vous pouvez voir que la valeur médiane est certainement la valeur minimale.

answerC.py


n=int(input())
s=input().split()
#Il est également important de paraphraser l'énoncé du problème ici
a=sorted([int(s[i])-i-1 for i in range(n)])

c=0
for i in range(n):
    if i<=n//2:
        c+=(a[n//2]-a[i])
    else:
        c+=(a[i]-a[n//2])
print(c)

ABC72-D(Derangement)

2WA

Puisque vous ne pouvez échanger que deux éléments adjacents, est-il clair que l'échange par l'avant est le moins de fois possible? (Comment puis-je le prouver ... ??) Quand $ p_i = i $, échangez $ p_i $ et $ p_ {i + 1} $ pour faire $ p_i ≠ i $, et répétez i = 1 ~ n-1 dans l'ordre, i <= n-1 Puisque $ p_i ≠ i $, vous n'avez besoin d'échanger avec $ p_n $ et $ p_ {n-1} $ que lorsque le dernier i = n est $ p_i = i $. ** De plus, puisque $ p_n = n $ à ce moment, il convient de noter que même s'il est échangé, $ p_ {n-1} ≠ n-1 $ sera satisfait. ** De plus, quand je le résolvais, je n'ai pas remarqué le préambule et je faisais à nouveau tourner la boucle avec i = n-1 ~ 1. (Il est clair que lorsque vous faites une boucle, seuls les échanges $ p_n $ et $ p_ {n-1} $ se produisent ...)

answerD_bad.py


n=int(input())
f=list(map(int,input().split()))
c=0
for i in range(n-1):
    if f[i]==i+1:
        c+=1
        f[i],f[i+1]=f[i+1],f[i]

for i in range(n-1,0,-1):
    if f1[i]==i+1:
        c+=1
        f[i],f[i-1]=f[i-1],f[i]

print(c)

answerD_good.py


n=int(input())
f=list(map(int,input().split()))
c=0
for i in range(n-1):
    if f[i]==i+1:
        c+=1
        f[i],f[i+1]=f[i+1],f[i]
if f[n-1]==n:
    
print(c)

ABC064-C

3WA,2RE

Ce n'est pas un problème difficile, mais j'ai fait beaucoup d'erreurs parce que j'ai mal compris qu'il n'y avait que les couleurs dans l'énoncé du problème, et j'ai oublié de demander le minimum et le maximum. ** Je veux lire correctement l'énoncé du problème, aussi simple soit-il. ** ** De plus, le code était fastidieux et terrible, alors je l'ai réécrit. ** N'obtenez pas de code redondant, c'est difficile à lire. ** **

answerC_bad.py


n=int(input())
a=sorted(list(map(int,input().split())))
c=[0]*8
k=n
for i in range(n):
    if a[i]<400:
        c[0]=1
    elif a[i]<800:
        c[1]=1
    elif a[i]<1200:
        c[2]=1
    elif a[i]<1600:
        c[3]=1
    elif a[i]<2000:
        c[4]=1
    elif a[i]<2400:
        c[5]=1
    elif a[i]<2800:
        c[6]=1
    elif a[i]<3200:
        c[7]=1
    else:
        k=i
        break

d=0
for i in range(8):
    if c[i]==1:
        d+=1
if d==0:
    print(1, end=" ")
else:
    print(d, end=" ")

print(d+(n-k))

answerC_good.py


n=int(input())
a=sorted(list(map(int,input().split())))
c=[0]*8
k=n
for i in range(n):
    for j in range(8):
        if 400*j<=a[i]<400*(j+1):
            c[j]=1
            break
    else:
        k=i
        break

d=c.count(1)
if d==0:
    print(1, end=" ")
else:
    print(d, end=" ")

print(d+(n-k))

Recommended Posts

Examen des questions passées d'AtCoder (12 / 6,7)
Examen des questions passées d'AtCoder (12/5)
Concours AtCoder pour débutants Défi des questions passées 6
Concours AtCoder pour débutants Défi des questions passées 4
AtCoder Grand Contest Past Question Challenge 2
Concours AtCoder pour débutants Défi des questions passées 9
Concours AtCoder pour débutants Défi des questions passées 7
AtCoder Grand Contest Défi des questions passées 1
Concours AtCoder pour débutants Défi des questions passées 10
AtCoder Beginner Contest 066 Revoir les questions précédentes
Concours AtCoder Débutants Défi des questions passées 5
AtCoder Beginner Contest 102 Revue des questions précédentes
AtCoder Beginner Contest 072 Revue des questions précédentes
AtCoder Beginner Contest 085 Revue des questions précédentes
AtCoder Beginner Contest 062 Revue des questions précédentes
AtCoder Beginner Contest 113 Revue des questions précédentes
AtCoder Beginner Contest 074 Revue des questions précédentes
AtCoder Beginner Contest 051 Revue des questions précédentes
AtCoder Beginner Contest 127 Revue des questions précédentes
AtCoder Beginner Contest 119 Revue des questions précédentes
AtCoder Beginner Contest 151 Revue des questions précédentes
AtCoder Beginner Contest 075 Revue des questions précédentes
AtCoder Beginner Contest 054 Revue des questions précédentes
AtCoder Beginner Contest 110 Revue des questions précédentes
AtCoder Beginner Contest 117 Revue des questions précédentes
AtCoder Beginner Contest 070 Revue des questions précédentes
AtCoder Beginner Contest 105 Revue des questions précédentes
AtCoder Beginner Contest 112 Revue des questions précédentes
AtCoder Beginner Contest 076 Revue des questions précédentes
AtCoder Beginner Contest 089 Revue des questions précédentes
AtCoder Beginner Contest 069 Revue des questions précédentes
AtCoder Beginner Contest 079 Revue des questions précédentes
AtCoder Beginner Contest 056 Revue des questions précédentes
AtCoder Beginner Contest 087 Revue des questions précédentes
AtCoder Beginner Contest 067 Revue des questions précédentes
AtCoder Beginner Contest 093 Revue des questions précédentes
AtCoder Beginner Contest 046 Revue des questions précédentes
AtCoder Beginner Contest 123 Revue des questions précédentes
AtCoder Beginner Contest 049 Revue des questions précédentes
AtCoder Beginner Contest 078 Revue des questions précédentes
AtCoder Beginner Contest 081 Revue des questions précédentes
AtCoder Beginner Contest 047 Revue des questions précédentes
AtCoder Beginner Contest 060 Revue des questions précédentes
AtCoder Beginner Contest 104 Revue des questions précédentes
AtCoder Beginner Contest 057 Revue des questions précédentes
AtCoder Beginner Contest 121 Revue des questions précédentes
AtCoder Beginner Contest 126 Revue des questions précédentes
AtCoder Beginner Contest 090 Revue des questions précédentes
AtCoder Beginner Contest 103 Revue des questions précédentes
AtCoder Beginner Contest 061 Revue des questions précédentes
AtCoder Beginner Contest 059 Revue des questions précédentes
AtCoder Beginner Contest 044 Revue des questions précédentes
AtCoder Beginner Contest 083 Revue des questions précédentes
AtCoder Beginner Contest 048 Revue des questions précédentes
AtCoder Beginner Contest 124 Revue des questions précédentes
AtCoder Beginner Contest 116 Revue des questions précédentes
AtCoder Beginner Contest 097 Revue des questions précédentes
AtCoder Beginner Contest 088 Revue des questions précédentes
AtCoder Beginner Contest 092 Revue des questions précédentes
AtCoder Beginner Contest 099 Revue des questions précédentes
AtCoder Beginner Contest 065 Revue des questions précédentes