AtCoder始めました。
という訳で、米田氏が企画した「競プロ典型90問」を解いていきます。
ここでは私の試行錯誤やら解説の理解やら気づきやらをメモしていこうと思います。
競プロ初心者なのでどうか温かい目で見守ってください。
なお、本記事中のPythonコードはブラウザ上で実行可能です。
よろしければ遊んでいってください。
問題
kyopro_educational_90/001.jpg at main · E869120/kyopro_educational_90
![](data:image/png;base64,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)
001 - Yokan Party(★4)
やってみよう!
テストデータ・テスト関数定義 ↓
# 縮小表示
test_data = [
{
"in": [3, 34, 1, [8, 13, 26]],
"out": 13
},
{
"in": [7, 45, 2, [7, 11, 16, 20, 28, 34, 38]],
"out": 12
},
{
"in": [3, 100, 1, [28, 54, 81]],
"out": 46
},
{
"in": [3, 100, 2, [28, 54, 81]],
"out": 26
},
{
"in": [20, 1000, 4, [51, 69, 102, 127, 233, 295, 350, 388, 417, 466, 469, 523, 553, 587, 720, 739, 801, 855, 926, 954]],
"out": 170
},
]
def test_all(f):
for i, data in enumerate(test_data):
exp = data["out"]
ans = f(*data["in"])
result = "AC" if exp == ans else "WA"
print(f"{i+1} {result}: expected: {exp}, output: {ans}")
下のmain0
関数を完成させて「Run」ボタンをクリックしよう!
def main0(N, L, K, data):
pass
test_all(main0)
自由欄
try(1st.)
とりあえず何も参照せずにやってみます。
今の私は全探索以外の武器を持っていないので愚直に全探索です。
from itertools import combinations
def main(N, L, K, data):
mins = list()
for comb in combinations(range(N), K):
pieces = list()
for i, s in enumerate(comb):
if i == 0:
pieces.append(data[s])
else:
pieces.append(data[s] - data[comb[i-1]])
else:
pieces.append(L - data[s])
mins.append(min(pieces))
return max(mins)
test_all(main)
よっしゃ、ちょろいぜ!提出!!
結果(1st.)
やはり全探索では無理がある…
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmQAAAECCAYAAABQVMtmAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAD2iSURBVHhe7d0HfBRlGsfxJyShC1IFRZCmYkOKBcUGKDZQARueBfshNqyoKCoqNlBEvbMLYkc9UbGBvYAFUYqFDoLSew8cv5eZOFl2k02y2dkk/+999tid3U02687Of573mXfStmxlIiIiIhKaMt6/IiIiIhISBTIRERGRkCmQiYiIiIRMgUxEREQkZApkIiIiIiFTIBMREREJmQKZiIiISMgUyERERERCpkAmIiIiEjIFMhEREZGQKZCJiIiIhCzXQMZpLl999VW79NJL7e2337bFixd798Rv9erV9sILL9gdd9xha9as8ZaWHsl8D/nZN954ow0dOjSu37Nu3Tq75ZZbrHXr1u7CdZaJiIhIcuV6cvG5c+da7969bfr06d4SsxYtWtgZZ5xhBx10kFWuXNlb+o+srCwbO3asvfXWW3bFFVdYzZo1rX///vb555/bkCFDbL/99vMeWTok6z3kOc8884z997//dbdPOOEEu+GGG6xixYrudjSEL37u+++/724fe+yxLpSVL1/e3Y5m2bJldtVVV9nEiRO9JYW3zz772EMPPWQ77rijt0RERKR0iVkh27x5s40ePTpHkMD48ePdhv6YY46xO++806ZNm+aqQL4yZcrYr7/+amPGjLEPP/zQypUrZ8cff7xt2LDBBQz+LS2S+R7+8MMP9tJLL7nr9evXtx49ethPP/1kd91113Y/X0RERFJLrhUy7lq0aJELFQSBqVOnevfkRMXn7LPPtoMPPtjKli1rf/zxh6vs1KpVyx588EEXKAggM2fOtMGDB1vTpk29Z+a0YsUKV+H55Zdf3NDcfffdZ40aNfLuLZ6K+j38+++/bcCAAS6Q8Z5VqVLF3d5zzz3tpptusm+//dY9rkOHDvbxxx+76/n1xBNPWMuWLd31yArZrbfeap07d3bXfQzNMryKunXrutfbsGFDd9v3yCOP2PPPP++uq0ImIiKlXa49ZGlpaS4QMLxG9WXkyJHWq1cvV4EJouLDsNwDDzzgqjcNGjSwNm3a2OTJk919hIT27du7Kk/VqlW9Z20vIyPD/vrrL/c8gse8efO8e4oWoWnhwoWu9+rhhx9OaBWvKN/DP//804W0L774woUx3j/CEv1go0aNyg5jRx55pB133HHuuoiIiKSeXCtksTAUN2HCBBs+fLh9+eWXtmnTJhcwCBN+RYswQFWoa9eurloTD14K1ZRhw4a52z179rTzzz/fXU8Efj4h74033nC9Veedd56lp6e70ENIokLHcv6OAw880HvWP1auXGl9+vRxFS+qORdeeKELPwWRiPfQ7xt7+umn3fMJfgxREtgIZvPnz3fLBg0a5ALbxRdf7D0zf3KrkCWCKmQiIlLaFSiQ+fyA8+KLL9ree+/tqjeF9eabb7pQARrTb775ZjeEF8TvXbVqlatqzZo1yw3vTZo0yV0/7LDD3BGNlSpV8h79j08//dSuvfZad53wQ/irV6+eq0gxzMdQG2I1t0eGkcceeyxqcMuPwr6HhLKnnnrKnnzySXebIcJq1aq5kIm+ffu6IUUqdZHU1C8iIpIaog5ZEnCoHnFE388//2wbN2707smJjfwuu+xi1113XULCGOg1YugNBCyOUvzxxx/d1BGEJob+GMo76qij7LTTTnO/mwrOV1995R7LsKAfrCJR5TnggAPc9dmzZ7uGeQIRge/kk0/OPiKRoxl///13dz1o6dKl2dNJ8NjcjmBM1ntIhY9K3UUXXeRuUxXzwxiB9uijj44axhKFHrLvv/8+x4VlPgLia6+9tt1jzj33XO8RIiIisl0go+LyzjvvuArIc88954YMO3bs6KpWhBSG2vKLKRx4Pj1Pkfh5DBUSIghIH3zwQXZFjNdA6GKojQb/119/3TXFMzwXC0N0sYYR6cNq166dd8vccOCCBQvc9SZNmriGejC8x328F0FU5Ag82Gmnnax69erueqRkv4eEMsIf75WPCiB/K/OXcXAAVTga6f05x7i0bds2uzoGrrMs+BieIyIiIkVru0DGFA0EoyACE0OJ3bt3dxcqUAwZxoOjABka5Pn0Qt1///3u5/n+97//ueBwzjnnuKMCqaYQiGLZbbfdXOWHKgxN+PSD+f1N4GjC3I7MpMF9r732ctd/++03F3RAtYvn+miU98OXj+kjfASeWENsyX4PQVik8gSCJxPE7rDDDq7H7Ouvv95u6o1E4WjKYIDj4h9hCd7DU089dbvH+EdYioiISJRARpihKkJVitARiQoVG1z6kuihIgjEQrDiMQQfUNli6C7Y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REQkZApkIiIiIiFTIBMREREJmQKZiIiISMjStmzlXc+2ZMkSW7VqlW3atMlbIiIiIiIFlZGRYZUrV7bq1at7S3LKEci4On/+fMvMzLSqVata2bJlvXtEREREpKA2bNhgK1ascP/WrVvX0tLSvHu2yRHIFi9ebJs3b7ZatWpZVlaWu0jJN3fuXKtXr553S0SKEusbtM6JlD7p6em2dOlSF8Zq1KjhLd0mu4eMXLZ69WpXGVMYExEREUksslWVKlVc3grUw5wcgYyeMYYpFcZEREREigZ5K9dAJiIiIiJFL2YgExEREZFwKJCJiIiIhEyBTERERCRkCmQiIiIiIVMgExEREQmZApmIiIhIyBTIREREREKmQCYiIiISMgUyERERkZApkImIiIiETIFMREREJGQKZCIiIiIhUyATERERCZkCWUiysrLs6aeftvPPP98ef/xx+/PPP717REREpLRJeiBbt26d9evXzw455BDr0qWLzZw507sn9QRfK5d33nnHu6dwtmzZYqNGjbLnn3/efv31V5s4caKVL1/eu1dERERKG1XIQvDDDz/YkCFDbNOmTe72+PHjrVOnTtnBz78QWLmPACdSlNgx4vOWyB0PEclbrHWP6/52IJULF5I4CmRJ9v3337uq24oVK7wlsf311182d+5c75akGoLyb7/9Zn379rVjjz3WfXmeeOKJdvfdd9tPP/1kmzdv9h4pIqUJ3w3/+c9/3HcCF0ZDtGMteUm5QMaHduXKlTZlyhT7+OOP7eGHH7aLLrrIunfvHle1aMmSJTZ8+HBXgdqwYYO3NHxsnD/44AO75ZZb3GusU6eOPfbYY/b1119nX7744gvXU+br0KGDtW/f3tLS0rwlkir4HL777rvuszl69OjsgM1/W/Zse/bsaW+++aZbJiKly+LFi+27777zbpl9/vnnbplIbkINZIQUeqiCweuoo46yjh072gUXXGC33nqrvfLKKzZp0iRXsmUvg7Dm88NX//79bdWqVW7Zp59+ao8++qjbKP7+++9uWRAhqGvXru5nx1OlCiLgFaTqsXbtWre3dNddd7nfWbVqVVdV2X///b1H/NNXNnToUHd71113tR49eljFihXdbUktfCYJ/ejdu7d98sknLlTzubvwwgttr732ssMOO8zdLyKlCxVyigr0BmdkZLjr0bZHIkFFHsj8iteMGTNc8OKIQobtsGDBArvjjjuygxfDPwQRxsxZfu6557rHgQ/1aaedZlWqVPGWmAtz//3vf+3DDz90jfFo27at7b777i74vPfeezmqZFxnL2X+/PlWpkwZK1u2rHdPfB544AHr3LmzC49//PFHnuGMv50V8ZprrrEXXnghu2ds+fLlLpCx18TP8Kst9913n3sMf+N1111nDRs2dI+X1EMfIJ+xpk2buipmuXLl3PLq1au7KudTTz1ltWvXdstEpPRYs2aNjRkzxl1nW3bSSSe56xQLUmnURlJPkQeyyZMn2ymnnGJnnXWWC16vvfaaq2yB6s8ZZ5xhgwYNsrfeestVGYYNG2bXXnut29D5H2rQm9O6dWvv1jb77LOPNW/e3IWY999/3x0VWatWLVdlw7fffmvz5s1z18H9/vQSNWvWzN6IxovnUIkjPBIWWdmo0C1btsx7RE70fxEs2Vsi/FFJueSSS1y45D1g+JK/nZ8RDGM333yztWrVyvspkopWr17t/uXzEKzaxkLonjNnjvvvTIXW7zfj804F1ec3+J5zzjluJ4Ygz+OOPPJIV5Hjy57H8zyW83MIgGPHjnW/w8fwPvfxmePzyc4Qj2PZ6aef7qqxTL0SD34fn3mex/P5vfwd9DiKSE7Tpk2zcePGue3bEUccYYceeqj7zmd7NHv2bO9RItsr8kBGlYDhGzYoVIr4Im/cuLG7j/BBxemggw5yj0tPT3fL2egwdMcGDFS8zjvvvO0qWjzfD19ffvmlWxHot2IFIDyxwfjxxx/d/aA65m9EmjRpku/erIsvvthV3e6991433EiFj+HRk08+2R588EEX/oIbRap9N9xwg51wwgn24osvWrdu3dyG9v7773c9ZASwESNGuGFUrlNdufPOO12VT31jqY3PF/iMsgPx2Wefuc9tNFRB2RFhp4QdDyq0IJRTMabyGvlcghl9aHw2eBx71nyGnnvuOff54Xn+jg2V4ttuu80F/0hUndkR4sLjwGvmc8bPC35eo2EDcvnll7uqsL8+8nv5O6688koXGkVkG9Yntjmsz3vvvbfttttubvtH4WDRokX21Vdf5bnOSelV5IGMitXgwYPdkWdUBqhq5TbnFh9kwg178CB09erVK+bwD2GO4MPzGArlw77zzju73wM2lH4Fg74fQlS1atWsUaNGbll+sddDbxDVCnraCJpscAlW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e7diBDIpXQjg+u8ukhz+Dq/WOZHSi++ByECmIUsRERGRkCmQiYiIiIRMgUxEREQkZApkIiIiIiFTIBMREREJmQKZiIiISMgUyERERERCpkAmIiIiEjIFMhEREZGQKZCJiIiIhEyBTERERCRkCmQiIiIiIVMgExEREQmZApmIiIhIyBTIREREREKmQCYiIiISsoQHstGjR1vPnj3t7bfftpUrV3pLE2vdunV2yy23WOvWra1Tp042Y8YM756Sh/eRv5ML10VERKTkSWggW7hwob344os2btw4GzVqlK1ZsyY7OMVz4bGErVT1448/Rn3dkZcBAwbk+neX9BApIiIi+ZOwQJaVlWVvvPGGTZgwwTIyMuyss86yqlWrevcWnfnz59upp54aNfhwOe+882zZsmXeo/NG6OrYsaMNGjTI/U2p5I477oj6N/oXXruUPuzE3H777fbMM8/Yli1bvKUikuq07kpQQgIZH6R3333Xnn32WXe7R48e1qZNG3fdt88++9jHH39s33//fY4Ly7gvFWzYsMHeeecdW7t2rbVv397S09O9e7Zp2bLldq/71ltvdZfg33fjjTda//79sx/rX84991zvJ0lpx2eManKXLl1cmGYn4D//+Y8tWbLEe0T8fv/9dxs/frwddthhlpaW5i3NafPmzfbtt9/apZdeagcffLAdcsghdv3119uvv/6qDYFIPiR73Y00ffp097vzW2yQ1JeQQPbdd9/ZQw89ZJs2bXJf9l27dt0uzEycONE6dOiQo6LDhWXcV1B169a11157bbvw41+ee+4523HHHb1H527WrFn2zTffuL+hSZMm3tLUQfCL9jf6FwKjpL5FixbZlVdeaUOGDLGDDjrI7r77bvel/uqrr9qFF17ovnDjRRWXvk3+2zdo0MBbmhOPefLJJ61Xr16uen3TTTe567Nnz3Zf6iNHjlQoE4lDstfdSLQBPf/8827dlZKn0IFswYIFbu9gxYoV7oPVt29fe/nll+2RRx5xH072zFEcKmS8Hvrg2rZtaxUrVvSW5sTfFQySDCNyCQZONd9LLFRhn3jiCZs6darbibnhhhvsmGOOsd69e9tTTz3lHjNw4EC3PsWDIfuvv/7affbKli3rLc3pk08+cdXriy66yB5++GHr3Lmzde/e3Q2TsDHhdRRmp0ikNAhj3Q0iwA0fPty++OILV4iQ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IYfYY4895i0ViQ9f9vf8eI/9sviXlPiy5zXwWnhNvDaR0izV1k9oHZX8KvaBjKreiBEj3IXQlZaW5t1TMMHgVpALz+VnSMnCnveWrf9LNbwmXptIaZaq6ye0jkq8inUgY2j11Vdftb/++ss6duxozZs3t3vuucfeeecdW7VqlfcokcJjGCRVpfJrE0mGVF8HtI5KPIplIKPf7f3337fTTjvN3nrrLdt1113tX//6l02YMMFGjRplQ4YMsRdffDFH5ap79+4uuOGFF17Icd9FF11ky5Ytc/cF3XTTTfb1119nX/gdqFOnjvv50e6TkilVhkGiSeZr++STT3KsO8HLnXfeqf5TCUUqr58I+/UtWLDArrrqqjxHcNauXWuvvPKKnXPOOW6dPvLII93zxo0bZ5s3b/YeJUWlWAYymuBq1qxp69atc7fPPfdcq1Chgg0dOtQ2bdpkZ511lh1wwAHuPhFJnD/++MP23ntvu/fee23w4ME5Lj169LCyZct6jxSRVDB16lS7+uqrXajKzeLFi+3aa6+1xx9/3HbffXc32tSzZ09bvXq1W/7SSy/F7NGWxCi2R1nyst9991277777rGLFilatWjX3+g888EC74447rEqVKt4jt2GvoHfv3q5KRjWLD1o0wccVBNWzgQMH2m677eYtSX06yjJvF3xygXctNT191NPetaLDDtCAAQPcunXllVfmODpI4qejLBMv1ddPJGMdDWIb+dNPP7nKNQWLHXbYwVXKom2f2P4/+uij9t5771n//v2tdevW3j3m2n9YNnv2bHvwwQetbt263j1SGCXqKEua94877jhXWl2xYoULY4ShK664YrswJlLa8eX86aef2vjx470lObEXPWbMmFyHJRjOmDNnjgsSCmMiRYfw8+abb7qgFImKFQex8W8srO+jR4+2Pn362C677GJ33323NWzY0Lt3e6zbbEc7depk++23n7d0m8qVK1v9+vXdDtn69eu9pVIUinVTPxsFxrhr165tGRkZbqjyiy++cD1hbHj41+9vya2HjIMAolEPmRRU+Yzy1r9NfxvWcZg92eFJ61C/g3dPTk12bGKXN7/cHm/3uA3tONQ9/rljnrOBhw+0Exue6D2q8AhahK6+ffva999/7y3dZsaMGXbzzTfbV199ld0GEM3ChQvdOkQVfePGje4LPNoGQ6Q4SLV1NIhK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EpGixPoGrXOFt/adU71r8eGoyAr7X7I1VGXa+t9H2LrJL3r3BO7L2L6PavPaxbZx9qdWtvHxUe/Hhpkf2dofh3i3YqtwYv5CZEEx/EiImjRpkrckp7333tvuv/9+Fwp88+bNsxdeeME+//xzW7JkidWtW9fN9s80GEx/IYnD9wDhOHieUAUyUSATSSIFssTJbyBLBckKZJLaogUy9ZCJiIiIhEyBTERERCRkCmQiIlI8lcm9sT3lFLfXK0mlQCYiIsVSes19vGvFQ3F7vZJcCmQiIlIsZTTtuvX/07bdSHlp3usViU6BTEREiqUy1fawcofeaem1W6TucODW18Xr43XyekVi0bQXomkvRJJI016IiKa9EBEREUlBCmQiIiIiIVMgExEREQmZApmIiIhIyBTIREREREKmQCYiIiISMgUyERERkZApkImIiIiELEcgY4IyTQorIiIiUnSCE8L6cgSyChUq2LJly6I+UEREREQKZ/369S5vRcoOZGlpaValShX3wKVLl3pLRURERCQR1q1bZytXrnR5i9wVlH0uS/7ZtGmTbdy40VasWOGCGee3FBEREZHCYfSxXLlyLoxlZmZaRkZGjlCWHciwefNmF8q4cD1wl4iIiIgUEOGrTJkyLohx4XpQjkDGVS5Uxrj4t0VERESkYAhjXKiScfFvB+UIZD4/iCmMiYiIiBSeH8Iig5gvaiATERERkeTRxLAiIiIiIVMgExEREQmZApmIiIhIqMz+D68bGzPsBN0sAAAAAElFTkSuQmCC)
提出 #32287997 - 競プロ典型 90 問
解説
kyopro_educational_90/001.jpg at main · E869120/kyopro_educational_90
答えで二分探索とのこと。
そんな発想、微塵もなかった…
羊羹問題、完全に理解した。
try(2nd.)
def main(N, L, K, data):
def is_exist(v):
left = 0
cnt = 0
for l in data+[L]:
target = l - left
if target < v:
continue
left = l
cnt += 1
if cnt > K:
return True
return False
l = 0
r = L
while r != l:
mid = (r + l + 1) // 2
if is_exist(mid):
l = mid
else:
r = mid - 1
return l
test_all(main)
結果(2nd.)
無事AC
提出 #32313575 - 競プロ典型 90 問
推敲
ここで想定コードを見ながらもうちょっと考えてみます。
なんか、自分の二分探索のコードがスッキリしないなぁ…
と考えていたら、そのものズバリのご指摘が。
謎のJK(?)に的確なご助言賜り複雑な心境ですが、とりあえずめぐる式二分探索法に修正したのが以下。
def main(N, L, K, data):
def is_exist(v):
left = 0
cnt = 0
for l in data+[L]:
target = l - left
if target < v:
continue
left = l
cnt += 1
if cnt > K:
return True
return False
ok = 0
ng = L
while abs(ok - ng) > 1:
mid = (ok + ng) // 2
if is_exist(mid):
ok = mid
else:
ng = mid
# okは条件を満たす最大の値、
# ngは条件を満たさない最小の値
return ok
test_all(main)
提出 #32319198 - 競プロ典型 90 問
(結果や実行時間はほぼ変わらず)
追記(2022/06/26)
最近、bisectモジュールの存在を知ったのですが、Python3.10からbisect
内の各関数でkey
引数を取ることができるようになりました。
上のmain
関数を書き換えると以下のようになります。
import bisect
def main(N, L, K, data):
def is_exist(v):
left = 0
cnt = 0
for l in data+[L]:
target = l - left
if target < v:
continue
left = l
cnt += 1
if cnt > K:
return True
return False
return L - bisect.bisect_left(range(L, -1, -1), True, key=is_exist)
# ok = 0
# ng = L
# while abs(ok - ng) > 1:
# mid = (ok + ng) // 2
# if is_exist(mid):
# ok = mid
# else:
# ng = mid
# # okは条件を満たす最大の値、
# # ngは条件を満たさない最小の値
# return ok
test_all(main)
う~ん、コードが短くなるのはいいとして、直感的には理解しづらいですかね。
取りうる範囲の中でTrue
とFalse
の境目を探すために「答えで二分探索」はそのままです。
内部的にはあくまでも大小関係を比較します。True > False
はTrue
なので、「ソート済み配列」にするためにrange(L, -1, -1)
としています。
現状、AtCoderのPythonは3.8なので(参照)実戦で使うのはまだ先になりそうですが、知っていて損はないでしょう。
追記終わり
自由欄