Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized

Karya panalungtikan panginten mangrupikeun bagian anu paling narik tina palatihan urang. Idena nyaéta pikeun nyobaan diri anjeun dina arah anu anjeun pilih nalika masih di universitas. Salaku conto, mahasiswa ti daérah Téknik Perangkat Lunak sareng Pembelajaran Mesin sering ngalaksanakeun panalungtikan di perusahaan (utamana JetBrains atanapi Yandex, tapi sanés ngan ukur).

Dina tulisan ieu kuring bakal ngobrol ngeunaan proyék kuring dina Ilmu Komputer. Salaku bagian tina karya kuring, kuring diajar sareng ngalaksanakeun pendekatan pikeun ngarengsekeun salah sahiji masalah NP-hard paling kasohor: masalah panutup vertex.

Kiwari, pendekatan metot kana masalah NP-hard ngembang gancang pisan - algoritma parameterized. Kuring baris coba mun meunang anjeun nepi ka speed, ngabejaan Anjeun sababaraha algoritma parameterized basajan tur ngajelaskeun hiji métode kuat nu mantuan kuring pisan. Kuring nampilkeun hasil kuring dina kompetisi PACE Challenge: dumasar kana hasil tés kabuka, solusi kuring nyandak tempat katilu, sareng hasil ahir bakal dipikanyaho dina 1 Juli.

Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized

ngeunaan Kuring

Nami abdi Vasily Alferov, abdi ayeuna rengse taun katilu abdi di National Research University Higher School of Economics - St. Kuring geus kabetot dina algoritma saprak poé sakola kuring, nalika kuring diajar di Moscow sakola No. 179 sarta junun milu dina Olimpiade elmu komputer.

Sajumlah terhingga spesialis dina algoritma parameterized asupkeun bar...

Conto dicokot tina buku "Algoritma parameterized"

Bayangkeun yén anjeun satpam bar di kota leutik. Unggal Jumaah, satengah kota datang ka bar anjeun pikeun bersantai, nu mere Anjeun loba gangguan: Anjeun kudu buang konsumén rowdy kaluar tina bar pikeun nyegah gelut. Antukna, anjeun bosen sareng mutuskeun nyandak tindakan pencegahan.

Kusabab kota anjeun leutik, anjeun terang persis mana pasangan patrons anu dipikaresep tarung lamun aranjeunna mungkas nepi di bar babarengan. Dupi anjeun gaduh daptar n jalma anu bakal datang ka bar wengi ayeuna. Anjeun mutuskeun pikeun ngajaga sababaraha warga kota kaluar tina bar tanpa aya anu gelut. Dina waktos anu sami, bos anjeun henteu hoyong kaleungitan kauntungan sareng bakal bagja upami anjeun henteu ngantepkeun langkung ti k jalma.

Hanjakalna, masalah sateuacan anjeun mangrupikeun masalah NP-teuas klasik. Anjeun bisa nyaho manehna salaku Panutup Vertex, atawa salaku vertex nutupan masalah. Pikeun masalah sapertos kitu, dina kasus umum, teu aya algoritma anu tiasa dianggo dina waktos anu tiasa ditampi. Janten tepatna, hipotésis anu teu kabuktian sareng rada kuat ETH (Exponential Time Hypothesis) nyarios yén masalah ieu henteu tiasa direngsekeun dina waktosna. Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized, nyaeta, anjeun teu bisa mikir nanaon noticeably hadé ti pilarian lengkep. Contona, umpamakeun batur bakal datang ka bar anjeun n = 1000 Manusa. Lajeng pilarian lengkep bakal Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized pilihan nu aya kira-kira Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized - jumlah gélo. Untungna, manajemén anjeun parantos masihan anjeun wates k = 10, janten jumlah kombinasi anu anjeun peryogikeun langkung alit: jumlah subset tina sapuluh elemen nyaéta Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized. Ieu hadé, tapi tetep moal diitung dina sapoé sanajan dina klaster kuat.
Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized
Pikeun ngaleungitkeun kamungkinan gelut dina konfigurasi ieu hubungan tapis antara sémah bar, Anjeun kudu tetep Bob, Daniel na Fedor kaluar. Henteu aya solusi anu ngan ukur dua anu bakal tinggaleun.

Naha ieu hartosna waktosna nyerah sareng ngantepkeun sadayana? Hayu urang nganggap pilihan séjén. Nya, contona, anjeun moal tiasa ngantepkeun ngan ukur jalma-jalma anu kamungkinan tarung sareng sajumlah ageung jalma. Lamun batur bisa ngalawan sahenteuna kalawan k+1 jalma sejen, mangka anjeun pasti moal bisa ngantep manehna asup - lamun teu, anjeun bakal kudu ngajaga dulur kaluar k+1 warga kota, kalayan saha anjeunna tiasa ngalawan, nu pasti bakal ngaganggu kapamimpinan.

Hayu anjeun miceun sadayana anu anjeun tiasa nurutkeun prinsip ieu. Lajeng dulur sejenna bisa ngalawan kalawan henteu leuwih ti k jalma. Ngalungkeun aranjeunna kaluar k lalaki, anjeun bisa nyegah nanaon leuwih ti Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized konflik. Ieu ngandung harti yén lamun aya leuwih ti Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized Lamun hiji jalma kalibet dina sahanteuna hiji konflik, anjeun pasti moal bisa nyegah eta sadayana. Kusabab, tangtosna, anjeun pasti bakal ngantep jalma-jalma anu henteu konflik lengkep, anjeun kedah ngaliwat sadaya sawaréh ukuran sapuluh tina dua ratus jalma. Aya kira-kira Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized, sareng jumlah operasi ieu parantos tiasa diurutkeun dina kluster.

Upami anjeun aman tiasa nyandak individu anu henteu gaduh konflik, teras kumaha upami anu milu dina ngan hiji konflik? Kanyataanna, maranéhna ogé bisa ngantep dina ku nutup panto on lawan maranéhanana. Mémang, upami Alice ngan ukur konflik sareng Bob, maka upami urang ngantepkeun Alice kaluar tina dua aranjeunna, urang moal leungit: Bob tiasa gaduh konflik sanés, tapi Alice pasti henteu gaduhna. Sumawona, teu aya akal pikeun urang henteu ngantepkeun urang duaan. Saatos operasi sapertos kitu, teu aya deui Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized sémah jeung nasib unresolved: urang boga ngan Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized konflik, unggal kalawan dua pamilon sarta masing-masing aub dina sahenteuna dua. Janten sadayana anu tetep nyaéta nyortir Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized pilihan, nu bisa gampang dianggap satengah poé dina laptop.

Kanyataanna, kalawan alesan basajan anjeun bisa ngahontal kaayaan malah leuwih pikaresepeun. Catet yén urang pasti kudu ngabéréskeun sagala sengketa, nyaeta, ti unggal pasangan conflicting, milih sahanteuna hiji jalma anu urang moal ngantep asup. Hayu urang nganggap algoritma di handap ieu: nyandak konflik mana wae, ti mana urang miceun hiji pamilon sarta recursively mimitian ti sésana, lajeng cabut séjén sarta ogé mimitian recursively. Kusabab urang ngalungkeun batur dina unggal léngkah, tangkal rekursi tina algoritma sapertos kitu mangrupikeun tangkal binér anu jero k, ku kituna dina total algoritma jalan di Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterizeddimana n nyaeta jumlah vertex, jeung m - jumlah iga. Dina conto urang, ieu ngeunaan sapuluh juta, nu bisa diitung dina hiji pamisah detik teu ukur dina laptop, tapi malah dina handphone.

Conto di luhur mangrupa conto algoritma parameterized. Algoritma parameterized nyaéta algoritma anu dijalankeun dina waktosna f(k) poli(n)dimana p - polinomial, f mangrupa fungsi komputasi sawenang, jeung k - sababaraha parameter, anu, sigana, bakal langkung alit tibatan ukuran masalah.

Sadaya alesan sateuacan algoritma ieu masihan conto kernelisasi mangrupa salah sahiji téhnik umum pikeun nyieun algoritma parameterized. Kernelization nyaéta pangurangan ukuran masalah kana nilai anu diwatesan ku fungsi parameter. Masalah anu dihasilkeun mindeng disebut kernel a. Ku kituna, ku alesan basajan ngeunaan darajat vertex, urang meunang kernel kuadrat pikeun masalah Vertex Cover, parameterized ku ukuran jawaban. Aya setélan séjén anu anjeun tiasa milih pikeun tugas ieu (sapertos Vertex Cover Luhur LP), tapi ieu mangrupikeun setélan anu bakal urang bahas.

Pace tangtangan

Pasanggiri PACE tangtangan (The Parameterized Algorithm and Computational Experiments Challenge) lahir di 2015 pikeun nyieun sambungan antara algoritma parameterized jeung pendekatan dipaké dina praktekna pikeun ngajawab masalah komputasi. Tilu kompetisi munggaran dikhususkeun pikeun milarian lebar tangkal tina grafik (Lebar tangkal), milarian tangkal Steiner (Tangkal Steiner) sareng milarian sakumpulan simpul anu motong siklus (Eupan Balik Vertex Siapkeun). Taun ieu, salah sahiji masalah anu anjeun tiasa nyobian nyaéta masalah panutup vertex anu dijelaskeun di luhur.

kompetisi ieu gaining popularitas unggal taun. Lamun yakin data awal, taun ieu 24 tim nyandak bagian dina kompetisi pikeun ngajawab vertex ngawengku masalah nyalira. Eta sia noting yén kompetisi lasts teu sababaraha jam atawa malah saminggu, tapi sababaraha bulan. Tim boga kasempetan pikeun diajar literatur, datang jeung gagasan aslina sorangan sarta nyoba nerapkeun eta. Intina, ieu pasanggiri téh mangrupa proyék panalungtikan. Gagasan pikeun solusi anu paling efektif sareng panghargaan para juara bakal dilaksanakeun babarengan sareng konperénsi éta IPEC (International Symposium on Parameterized and Exact Computation) salaku bagian tina rapat algoritma taunan panggedéna di Éropa. ALGO. Inpo nu leuwih lengkep ngeunaan kompetisi sorangan bisa kapanggih dina website, sarta hasil taun saméméhna bohong di dieu.

Diagram solusi

Pikeun ngajawab masalah nutupan vertex, abdi diusahakeun make algoritma parameterized. Aranjeunna ilaharna diwangun ku dua bagian: aturan nyederhanakeun (anu ideally ngakibatkeun kernelization) jeung aturan bengkahna. Aturan nyederhanakeun nyaéta preprocessing input dina waktos polinomial. Tujuan nerapkeun aturan sapertos kitu nyaéta pikeun ngirangan masalah janten masalah anu langkung alit. Aturan nyederhanakeun mangrupikeun bagian anu paling mahal tina algoritma, sareng nerapkeun bagian ieu nyababkeun total waktos jalan Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized tinimbang waktu polinomial basajan. Dina hal urang, aturan bengkahna dumasar kana kanyataan yén pikeun tiap vertex anjeun kudu nyandak boh atawa tatanggana salaku jawaban.

Skéma umum nyaéta kieu: urang nerapkeun aturan nyederhanakeun, lajeng urang milih sababaraha vertex, sarta nyieun dua telepon recursive: kahiji urang nyandak eta di respon, sarta di séjén nyokot sakabeh tatanggana. Ieu naon anu urang sebut pamisah (cabang) sapanjang vertex ieu.

Persis hiji tambahan bakal dilakukeun pikeun skéma ieu dina paragraf salajengna.

Gagasan pikeun ngabagi (brunching) aturan

Hayu urang ngabahas kumaha carana milih hiji vertex sapanjang nu bengkahna bakal lumangsung.
Gagasan utama pisan rakus dina rasa algorithmic: hayu urang nyandak hiji vertex tina gelar maksimum sarta dibagi sapanjang eta. Naha sigana langkung saé? Kusabab dina cabang kadua panggero recursive kami bakal miceun loba vertex ku cara ieu. Anjeun tiasa ngandelkeun grafik leutik anu sésana sareng urang tiasa dianggo gancang.

Pendekatan ieu, kalayan téknik kernelisasi saderhana anu parantos dibahas, nunjukkeun diri anu saé sareng ngabéréskeun sababaraha tés ukuran sababaraha rébu simpul. Tapi, contona, éta henteu dianggo saé pikeun grafik kubik (nyaéta, grafik anu gelar unggal vertex tilu).
Aya gagasan sejen dumasar kana gagasan anu cukup basajan: lamun grafik dipegatkeun, masalah dina komponén disambungkeun bisa direngsekeun mandiri, ngagabungkeun jawaban dina tungtungna. Ieu, saliwatan, mangrupakeun modifikasi leutik jangji dina skéma, nu nyata bakal nyepetkeun solusi: saméméhna, dina hal ieu, urang digawé pikeun produk jaman keur ngitung réspon komponén, tapi ayeuna urang dianggo pikeun jumlahna. Jeung pikeun nyepetkeun branching, Anjeun kudu ngarobah hiji grafik disambungkeun kana hiji dipegatkeun.

Kumaha cara ngalakukeunana? Upami aya titik artikulasi dina grafik, anjeun kedah ngalawan éta. Titik artikulasi mangrupikeun titik anu nalika dipiceun, grafik leungit konektipitasna. Sadaya titik simpang dina grafik tiasa dipendakan nganggo algoritma klasik dina waktos linier. Pendekatan ieu sacara signifikan nyepetkeun cabang.
Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized
Nalika salah sahiji simpul anu dipilih dipiceun, grafik bakal dibagi kana komponén anu nyambung.

Urang bakal ngalakukeun ieu, tapi urang hoyong langkung. Contona, néangan motong vertex leutik dina grafik jeung beulah sapanjang vertex ti dinya. Cara anu paling éfisién anu kuring terang pikeun mendakan cut vertex global minimum nyaéta ngagunakeun tangkal Gomori-Hu, anu diwangun dina waktos kubik. Dina PACE Challenge, ukuran grafik has sababaraha rébu titik. Dina kaayaan ieu, milyaran operasi kudu dipigawé di unggal vertex tangkal recursion. Tétéla éta ngan saukur teu mungkin pikeun ngajawab masalah dina waktos allotted.

Hayu urang coba ngaoptimalkeun solusi. Potongan vertex minimum antara sapasang vertex bisa kapanggih ku sagala algoritma nu constructs aliran maksimum. Anjeun tiasa ngantepkeun kana jaringan sapertos kitu Algoritma Dinitz, dina prakna gawéna gancang pisan. Kuring boga kacurigaan yén éta téh téoritis mungkin ngabuktikeun estimasi keur waktu operasi Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized, nu geus rada ditarima.

Kuring diusahakeun sababaraha kali néangan motong antara pasangan simpul acak sarta nyokot hiji paling saimbang. Hanjakalna, ieu ngahasilkeun hasil anu goréng dina tés PACE Challenge kabuka. Kuring dibandingkeun sareng algoritma anu ngabagi simpul tina gelar maksimal, ngajalankeun aranjeunna kalayan watesan dina jero turunan. Algoritma anu nyobian mendakan potongan ku cara kieu tinggaleun grafik anu langkung ageung. Ieu disababkeun ku kanyataan yén potongan tétéla henteu saimbang pisan: saatos ngaleungitkeun 5-10 simpul, ngan ukur tiasa dipisahkeun 15-20.

Perlu dicatet yén tulisan ngeunaan algoritma panggancangna sacara téoritis ngagunakeun téknik anu langkung maju pikeun milih simpul pikeun pamisah. Téhnik sapertos kitu gaduh palaksanaan anu rumit pisan sareng kinerja sering goréng dina hal waktos sareng mémori. Abdi henteu tiasa ngaidentipikasi anu cukup ditarima pikeun latihan.

Kumaha Larapkeun Aturan Nyederhanakeun

Urang geus boga gagasan pikeun kernelization. Hayu atuh ngingetkeun anjeun:

  1. Upami aya vertex terasing, pupus.
  2. Lamun aya vertex darajat 1, cabut eta sarta nyandak tatangga na di respon.
  3. Lamun aya vertex gelar sahenteuna k+1, candak deui.

Kalawan dua kahiji sagalana jelas, kalawan katilu aya hiji trik. Lamun dina masalah komik ngeunaan hiji bar kami dibere wates luhur k, teras dina PACE Challenge anjeun ngan ukur kedah milarian panutup vertex tina ukuran minimum. Ieu transformasi has tina Search Masalah kana Putusan Masalah; mindeng euweuh bédana antara dua jenis masalah. Dina prakna, lamun urang nulis solver pikeun vertex ngawengku masalah, meureun aya bédana. Contona, saperti dina titik katilu.

Ti sudut pandang palaksanaan, aya dua cara pikeun lumangsungna. Pendekatan kahiji disebut Iterative Deepening. Ieu kieu: urang bisa mimitian ku sababaraha konstrain lumrah ti handap dina jawaban, lajeng ngajalankeun algoritma urang ngagunakeun Konstrain ieu salaku konstrain dina jawaban ti luhur, tanpa bade handap dina recursion ti Konstrain ieu. Lamun kami geus kapanggih sababaraha jawaban, eta dijamin jadi optimal, disebutkeun urang bisa ningkatkeun wates ieu ku hiji tur mimitian deui.

pendekatan sejen nyaeta nyimpen sababaraha jawaban optimal ayeuna jeung néangan jawaban leutik, ngarobah parameter ieu lamun kapanggih k pikeun leuwih gede motong off cabang teu perlu dina pilarian.

Saatos ngalaksanakeun sababaraha percobaan nightly, abdi netep dina kombinasi dua métode ieu: kahiji, abdi ngajalankeun algoritma abdi kalayan sababaraha jenis wates dina jero pilarian (milih eta ku kituna butuh waktu negligible dibandingkeun solusi utama) jeung ngagunakeun pangalusna. solusi kapanggih salaku wates luhur jawaban - nyaeta, pikeun hal anu sarua k.

Puncak gelar 2

Kami parantos ngurus titik-titik derajat 0 sareng 1. Tétéla yén ieu bisa dipigawé kalayan vertex darajat 2, tapi ieu bakal merlukeun operasi leuwih kompleks tina grafik.

Pikeun ngajelaskeun ieu, urang kedah kumaha waé nunjuk simpul. Hayu urang nelepon vertex derajat 2 vertex a v, jeung tatanggana - vertices x и y. Salajengna urang bakal boga dua kasus.

  1. iraha x и y - tatangga. Teras anjeun tiasa ngajawab x и yjeung v mupus. Mémang, tina segitiga ieu sahenteuna dua vertice kedah dicandak, sareng urang pasti moal éléh upami urang nyandak. x и y: aranjeunna meureun boga tatanggana séjén, jeung v aranjeunna henteu.
  2. iraha x и y - teu tatangga. Lajeng disebutkeun yen sakabeh tilu vertex bisa glued kana hiji. Ide nya éta dina hal ieu aya jawaban optimal, nu urang nyandak boh v, atawa duanana vertex x и y. Leuwih ti éta, dina kasus nu pertama urang kudu nyandak sakabeh tatanggana di respon x и y, Tapi dina kadua teu perlu. Ieu persis pakait jeung kasus nalika urang teu nyandak vertex glued dina respon na nalika urang ngalakukeun. Eta tetep ngan pikeun dicatet yén dina dua kasus, réspon ti operasi sapertos nurun ku hiji.

Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized

Eta sia noting yén pendekatan ieu rada hese pikeun nerapkeun akurat dina waktu linier adil. Gluing vertex mangrupikeun operasi anu rumit; anjeun kedah nyalin daptar tatangga. Upami ieu dilakukeun sacara teu ati-ati, anjeun tiasa ngeureunkeun waktos jalan anu asymptotically suboptimal (contona, upami anjeun nyalin seueur ujung saatos unggal gluing). Kuring netep dina nyungsi sakabéh jalur ti vertices darajat 2 sarta analisa sakumpulan kasus husus, kayaning siklus ti vertices misalna atawa tina sagala vertex misalna iwal hiji.

Sajaba ti éta, perlu yén operasi ieu bisa malik, ku kituna lamun balik ti recursion urang balikkeun grafik kana formulir aslina. Pikeun mastikeun ieu, kuring henteu mupus daptar ujung tina simpul anu dihijikeun, teras kuring ngan ukur terang anu mana anu kedah dituju. Ieu palaksanaan grafik ogé merlukeun akurasi, tapi nyadiakeun waktu linier adil. Jeung grafik sababaraha puluhan rébu tina edges, eta fits kana cache processor, nu mere kaunggulan hébat dina speed.

Kernel linier

Tungtungna, bagian paling narik tina kernel.

Pikeun mimitian, émut yén dina grafik bipartit, panutup vertex minimum tiasa dipendakan nganggo Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized. Jang ngalampahkeun ieu anjeun kedah nganggo algoritma Hopcroft-Karp Dina raraga neangan nu cocog maksimum aya, lajeng nganggo teorema König-Egervari.

Gagasan kernel linier nyaéta kieu: kahiji urang bifurcate grafik, nyaéta, tinimbang unggal vertex. v hayu urang tambahkeun dua puncak Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized и Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized, sarta gaganti unggal ujung anjeun - v hayu urang tambahkeun dua iga Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized и Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized. Grafik anu dihasilkeun bakal bipartit. Hayu urang manggihan panutup vertex minimum di dinya. Sababaraha simpul tina grafik aslina bakal ka dinya dua kali, sababaraha ngan sakali, sarta sababaraha pernah. Téoréma Nemhauser-Trotter nyatakeun yén dina hal ieu anjeun tiasa ngahapus simpul anu henteu pencét sakali sareng nyandak deui anu pencét dua kali. Leuwih ti éta, manéhna nyebutkeun yén tina vertice sésana (anu pencét sakali) anjeun kudu nyokot sahenteuna satengah salaku jawaban.

Urang kakarék diajar ninggalkeun teu leuwih ti 2k puncak Saleresna, upami jawaban sésana sahenteuna sahenteuna satengah tina sadaya simpul, maka jumlahna teu aya deui titik 2k.

Di dieu kuring bisa nyandak hiji hambalan leutik ka hareup. Ieu jelas yén kernel diwangun ku cara ieu gumantung kana jenis panutup vertex minimal urang nyandak dina grafik bipartite. Abdi hoyong nyandak hiji supados jumlah titik sésana minimal. Sateuacanna, aranjeunna tiasa ngalakukeun ieu ngan ukur dina waktosna Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized. Kuring datang nepi ka hiji palaksanaan algoritma ieu dina jangka waktu nu Kumaha carana ngajawab masalah NP-teuas jeung algoritma parameterized, Ku kituna, inti ieu bisa ditéang dina grafik ratusan rébu titik dina unggal tahap branching.

hasil

Prakték nunjukkeun yén solusi kuring tiasa dianggo saé dina tés sababaraha ratus simpul sareng sababaraha rébu sisi. Dina tés sapertos kitu, mungkin pikeun nyangka yén solusi bakal dipendakan dina satengah jam. Kamungkinan pikeun manggihan jawaban dina jangka waktu nu bisa ditarima, prinsipna mah, naek lamun grafik ngabogaan angka cukup badag tina vertex darajat luhur, contona, gelar 10 jeung luhur.

Pikeun ilubiung dina kompetisi, solusi kedah dikirim ka optil.io. Ditilik ku informasi dibere dinya tanda, solusi kuring dina tés kabuka urutan katilu kaluar dua puluh, kalawan gap badag ti kadua. Sajujurna, teu jelas pisan kumaha solusi anu bakal dievaluasi dina kompetisi éta sorangan: contona, solusi kuring langkung seueur tés tibatan solusi dina tempat kaopat, tapi pikeun anu lulus, éta langkung gancang.

Hasil tes tertutup bakal dipikanyaho dina XNUMX Juli.

sumber: www.habr.com