[PYTHON] AtCoder Beginner Contest 057 Rückblick auf frühere Fragen

Frühere Fragen zum ersten Mal gelöst

Benötigte Zeit

スクリーンショット 2020-01-09 11.04.54.png

Impressionen

Ich hätte nicht gedacht, dass ich so eine Pena nur durch Missverständnisse machen würde Es war in den letzten zwei Tagen schrecklich, also muss ich etwas ruhiger sein

Problem A

Geben Sie einfach den Rest aus

answerA.py


a,b=map(int,input().split())
print((a+b)%24)

B-Problem

Überprüfen Sie die Checkpoints in der richtigen Reihenfolge und aktualisieren Sie sie

answerB.py


n,m=map(int,input().split())
ab=[list(map(int,input().split())) for i in range(n)]
cd=[list(map(int,input().split())) for i in range(m)]

def manh(x,y):
    return abs(x[0]-y[0])+abs(x[1]-y[1])

ans=[]
for i in range(n):
    ans_sub=[0,manh(ab[i],cd[0])]
    for j in range(m):
        k=manh(ab[i],cd[j])
        if k<ans_sub[1]:
            ans_sub=[j,k]
    ans.append(ans_sub[0])
for i in range(n):
    print(ans[i]+1)

C-Problem

Zuerst habe ich das falsch verstanden und den Boden in Decke geschrieben. Sie können von vorne im Bereich von $ \ sqrt {n} $ suchen.

answerC.py


import math
n=int(input())
l=math.floor(math.sqrt(n))
k=math.floor(math.log10(n))+1

for i in range(2,l+1):
    if n%i==0:
        a,b=i,n//i
        x=max(math.floor(math.log10(a))+1,math.floor(math.log10(b))+1)
        k=min(x,k)
print(k)

Code, der mit exit etwas schneller war

answerC_faster.py


from sys import exit
import math
n=int(input())
l=math.floor(math.sqrt(n))

for i in range(l+1,0,-1):
    if n%i==0:
        a,b=i,n//i
        h=max(a,b)
        k=math.floor(math.log10(h))+1
        print(k)
        exit()

D Problem

Zunächst ist es offensichtlich, dass Sie zuerst diejenigen mit dem höchsten Wert auswählen sollten, und diejenigen mit demselben Wert haben denselben Gesamtwert **, unabhängig davon, welchen Sie auswählen. Sortieren Sie sie daher in absteigender Reihenfolge und verwenden Sie dann die Funktion groupby. Ich habe es angewendet. Wenn es A oder mehr Elemente mit dem höchsten Wert gibt, können Sie die Elemente aus diesen Elementen auswählen, um die Bedingung von A oder mehr und B oder weniger zu erfüllen. (Ich konnte den Fehler überhaupt nicht beseitigen, weil ich dachte, dass der Wert, der aus den Elementen ausgewählt werden sollte, sich von der Anzahl der Elemente unterscheidet. ** Ich habe den Fehler genommen, ohne aufzugeben , ist eine Bewertung wert. Ich weiß, wie man es löst, aber ich habe einen Fehler beim Schreiben des Codes gemacht ... Als ich den Sumpf betreten wollte, dachte ich, ich müsste ihn mit dem Gefühl überprüfen, von vorne zu beginnen ...) Wenn A größer als die Anzahl der wertvollsten Elemente ist, verringert sich der Durchschnitt, wenn Sie die Elemente auswählen. Daher möchten Sie die Anzahl der ausgewählten Elemente so weit wie möglich reduzieren. Daher ist es am besten, genau A auszuwählen, was leicht durch Zählen der Elemente in der Reihenfolge von vorne erhalten werden kann. ( Es wäre einfacher gewesen, wenn ich das ursprüngliche Array mit group by ... ** beibehalten hätte.) Der Code, der basierend auf der obigen Überlegung geschrieben wurde, ist wie folgt. Zusätzlich zu den oben genannten Fehlern war dieses Problem zu schrecklich. ** Ich habe versucht, scipy zu verwenden und konnte es nicht verwenden **, ** ich wollte nicht brechen **. Darüber hinaus halte ich es für wichtig, die Lösung zu verbalisieren, da es einige Teile gibt, die verstanden werden können, wenn sie bisher verbalisiert werden.

answerD.py


import math
#from scipy.special import comb
def combinations_count(n, r):
    return math.factorial(n) // (math.factorial(n - r) * math.factorial(r))

def groupby(a):
    a2=[[a[0],1]]
    for i in range(1,len(a)):
        if a2[-1][0]==a[i]:
            a2[-1][1]+=1
        else:
            a2.append([a[i],1])
    return a2

N,A,B=map(int,input().split())
v=[int(i) for i in input().split()]
v.sort(reverse=True)
v=groupby(v)

if A<=v[0][1]:
    #Das ist falsch
    m=min(v[0][1],B)
    co=0
    for i in range(A,m+1):
        #v[0][1]War m
        co+=combinations_count(v[0][1],i)
    print(v[0][0])
    print(co)
else:
    al=0
    l=len(v)
    C=0
    for i in range(l):
        C+=v[i][1]
        if C<=A:
            al+=(v[i][0]*v[i][1])
        else:
            C-=v[i][1]
            al+=(v[i][0]*(A-C))
            co=combinations_count(v[i][1],A-C)
            #Ich habe vergessen zu brechen
            break
    print(al/A)
    print(co)

Recommended Posts

AtCoder Beginner Contest 072 Rückblick auf frühere Fragen
AtCoder Beginner Contest 085 Rückblick auf frühere Fragen
AtCoder Beginner Contest 062 Rückblick auf frühere Fragen
AtCoder Beginner Contest 113 Rückblick auf frühere Fragen
AtCoder Beginner Contest 074 Rückblick auf frühere Fragen
AtCoder Beginner Contest 127 Rückblick auf frühere Fragen
AtCoder Beginner Contest 151 Rückblick auf frühere Fragen
AtCoder Beginner Contest 075 Rückblick auf frühere Fragen
AtCoder Beginner Contest 054 Rückblick auf frühere Fragen
AtCoder Beginner Contest 110 Rückblick auf frühere Fragen
AtCoder Beginner Contest 117 Rückblick auf frühere Fragen
AtCoder Beginner Contest 070 Rückblick auf frühere Fragen
AtCoder Beginner Contest 105 Rückblick auf frühere Fragen
AtCoder Beginner Contest 112 Rückblick auf frühere Fragen
AtCoder Beginner Contest 076 Rückblick auf frühere Fragen
AtCoder Beginner Contest 089 Rückblick auf frühere Fragen
AtCoder Beginner Contest 069 Rückblick auf frühere Fragen
AtCoder Beginner Contest 079 Rückblick auf frühere Fragen
AtCoder Beginner Contest 056 Rückblick auf frühere Fragen
AtCoder Beginner Contest 087 Rückblick auf frühere Fragen
AtCoder Beginner Contest 067 Rückblick auf frühere Fragen
AtCoder Beginner Contest 093 Rückblick auf frühere Fragen
AtCoder Beginner Contest 123 Überprüfung früherer Fragen
AtCoder Beginner Contest 078 Rückblick auf frühere Fragen
AtCoder Beginner Contest 081 Rückblick auf frühere Fragen
AtCoder Beginner Contest 047 Rückblick auf frühere Fragen
AtCoder Beginner Contest 060 Rückblick auf frühere Fragen
AtCoder Beginner Contest 104 Rückblick auf frühere Fragen
AtCoder Beginner Contest 057 Rückblick auf frühere Fragen
AtCoder Beginner Contest 121 Rückblick auf frühere Fragen
AtCoder Beginner Contest 126 Rückblick auf frühere Fragen
AtCoder Beginner Contest 090 Rückblick auf frühere Fragen
AtCoder Beginner Contest 103 Rückblick auf frühere Fragen
AtCoder Beginner Contest 061 Rückblick auf frühere Fragen
AtCoder Beginner Contest 059 Rückblick auf frühere Fragen
AtCoder Beginner Contest 044 Rückblick auf frühere Fragen
AtCoder Beginner Contest 083 Rückblick auf frühere Fragen
AtCoder Beginner Contest 048 Rückblick auf frühere Fragen
AtCoder Beginner Contest 124 Rückblick auf frühere Fragen
AtCoder Beginner Contest 116 Rückblick auf frühere Fragen
AtCoder Beginner Contest 097 Rückblick auf frühere Fragen
AtCoder Beginner Contest 088 Rückblick auf frühere Fragen
AtCoder Beginner Contest 092 Rückblick auf frühere Fragen
AtCoder Beginner Contest 099 Rückblick auf frühere Fragen
AtCoder Beginner Contest 065 Rückblick auf frühere Fragen
AtCoder Beginner Contest 053 Rückblick auf frühere Fragen
AtCoder Beginner Contest 094 Rückblick auf frühere Fragen
AtCoder Beginner Contest 063 Rückblick auf frühere Fragen
AtCoder Beginner Contest 107 Rückblick auf frühere Fragen
AtCoder Beginner Contest 071 Rückblick auf frühere Fragen
AtCoder Beginner Contest 064 Rückblick auf frühere Fragen
AtCoder Beginner Contest 082 Rückblick auf frühere Fragen
AtCoder Beginner Contest 084 Rückblick auf frühere Fragen
AtCoder Beginner Contest 068 Rückblick auf frühere Fragen
AtCoder Beginner Contest 043 Rückblick auf frühere Fragen
AtCoder Beginner Contest 098 Rückblick auf frühere Fragen
AtCoder Beginner Contest 114 Rückblick auf frühere Fragen
AtCoder Beginner Contest 045 Rückblick auf frühere Fragen
AtCoder Beginner Contest 120 Rückblick auf frühere Fragen
AtCoder Beginner Contest 108 Rückblick auf frühere Fragen