Wednesday, April 27, 2011

Програмчлалын улсын 21-р олимпиадын бодлогууд

2-р өдрийн 1-р бодлого.

Гурвалжинг судлая

Хугацааны хязгаарлалт: 2 сек

Координатын эх О-цэгийн баруун талд (эерэг талд) ОХ-тэнхлэг дээр бүхэл координаттай С цэг тэмдэглэв. Ингэхэд О цэгээс с-зайтай, С-цэгээс а-зайтай эерэг хагас (ОХ-тэнхлэгээс дээш) хавтгайд орших цор ганц В-цэг олдоно. Үүний дараа та дараах 2 даалгаварыг гүйцэтгэ.

1-рт нь:
ОВ-хэрчим дээр С1, С2, ... , Ск гэсэн ялгаатай цэгүүдийг ОС1, ОС2, ... , ОСк хэрчмүүдийн урт бүхэл тоо байхаар тэмдэглэв. Дараа нь мөн ОС-хэрчим дээр В1, В2, ... , Вm гэсэн ялгаатай цэгүүдийг OB1, OB2, ... , OBm хэрчмүүдийн урт бүхэл тоо байхаар тэмдэглэв. Эцэст нь BC хэрчим дээр A1, A2, ... , An гэсэн ялгаатай цэгүүдийг BA1, BA2, ... , BAn хэрчмүүдийн урт бүхэл тоо байхаар тэмдэглэв.

1-р даалгавар:
CCi, OAj, BBt хэрчмүүд нэг цэгт огтлолцдог байх бүх (i,j,t) гурвалуудыг ол. (1 <= i <= k, 1 <= j <= n, 1 <= t <= m)

2-рт нь:
1-р даалгавраа гүйцэтгэсний дараа, О-цэгээс зүүн талд (сөрөг талд) ОХ-тэнхлэг дээр D1, D2, ... , Dp гэсэн ялгаатай цэгүүдийг OD1, OD2, ... , ODp хэрчмийн урт бүхэл байхаар авав.

2-р даалгавар:
Ci, Aj, Dt цэгүүд нэг шулуун дээр оршдог байх бүх (i,j,t) гурвалуудыг ол. (1 <= i <= k, 1 <= j <= n, 1 <= t <= p)

Оролт (tr.in)
Оролтын файл 10 мөрөөс тогтоно.
Эхний мөрөнд С цэгийн координат болох "b" гэсэн 10000-аас хэтрэхгүй натурал тоо байна.
2-р мөрөнд B-цэгийг олоход хэрэглэх "c" ба "a" гэсэн 2 натурал тоо хоосон зайгаар тусгаарлагдан өгөгдөнө.
Эдгээр тоонууд мөн 10000-аас хэтрэхгүй. (2 < a,b,c <= 10000)
3-р мөрөнд k-гэсэн натурал тоо байна. (k <= 150)
Дараагийн мөрөнд OC1, OC2, ... , OCk хэрчмүүдийн уртыг илэрхийлэх c1, c2, ... , ck гэсэн ялгаатай натурал тоонууд хоосон зайгаар тусгаарлагдан байрлана. (ci < c, i=1..k)
5-р мөрөнд m гэсэн натурал тоо байна. (m <= 150)
Дараагийн мөрөнд OB1, OB2, ... , OBm хэрчмүүдийн уртыг илэрхийлэх b1, b2, ... , bm гэсэн ялгаатай натурал тоонууд хоосон зайгаар тусгаарлагдан байрлана. (bi < b, i=1..m)
7-р мөрөнд n гэсэн натурал тоо байна. (n <= 150)
Дараагийн мөрөнд BA1, BA2, ... , BAn хэрчмүүдийн уртыг илэрхийлэх a1, a2, ... , an гэсэн ялгаатай натурал тоонууд хоосон зайгаар тусгаарлагдан байрлана. (ai < a, i=1..n)
9-р мөрөнд p-гэсэн натурал тоо байна. (p <= 150)
Эцсийн мөрөнд OD1, OD2, ... , ODp хэрчмүүдийн уртыг илэрхийлэх d1, d2, ... , dp гэсэн 10000-аас хэтрэхгүй ялгаатай натурал тоонууд хоосон зайгаар тусгаарлагдан байрлана.

Гаралт (tr.out)
Мөр бүрт 1-р даалгаврын хариу болох (i, j, t) гурвалуудыг илэрхийлэх i, j, t гэсэн 3 тоо хоосон зайгаар тусгаарлагдан байрлана. Тус гурвалуудыг хэвлэхдээ i-гийн координатаар өсөхөөр эрэмбэлж гаргана, хэрэв i-нь тэнцүү бол i-координатаар нь өсөхөөр эрэмбэлж гаргана. Жишээ нь: (1,3,2) (2,2,3) (2,3,1) гэсэн дарааллаар хэвлэнэ.
1-р даалгаврын бүх хариуг хэвлэж дууссаны дараа "PART 2" гэсэн тэмдэгт мөр хэвлэнэ. (1-р даалгавар нэг ч хариугүй байсан ч PART 2 гэж хэвлэнэ)
Үүний араас мөр бүрт 2-р даалгаварын хариу болох (i,j,t) гурвалуудыг илэрхийлэх i,j,t гэсэн 3 тоо хоосон зайгаар тусгаарлагдан байрлана. Тус гурвалуудаа хэвлэх дараалал нь өмнөхтэй адил байна.

Жишээ оролт
8
10 12
2
1 5
3
1 5 4
2
7 6
3
2 4 1000

Жишээ гаралт
2 2 3
PART 2

Тайлбар
CC2 = 5, OA2 = 6, BB3 = 4 хэрчмүүд нэг цэгт огтлолцох тул 2 2 3 гэж гаргана.
Ci, Aj, Dt цэгүүд дунд нэг шулуун дээр орших гурвал олдохгүй байна.

Monday, April 25, 2011

Улсын програмчлалын 21-р олимпиадын дүн

Өнгөрсөн амралтын өдрүүдээр буюу 4 сарын 23-24 өдрүүдэд Улсын Програмчлалын 21-р олимпиад КТМС дээр зохиогдож дүнгээ гаргалаа. Ингээд нийлбэр дүнгээр

1. Өсөхбаатар МУИС-МТС - 240
2. Хонгор МУИС-МКС - 210
3. Мөнх-Очир МУИС-МКС - 200
4. Чинбат КТМС - 195
5. Амар КТМС - 185
6. Амгаланбаатар КТМС - 185

Багийн дүнгээр МУИС-МТС 1-р баг түрүүлж шилжин явах цомын эзэд боллоо. Амжилттай оролцсон хүмүүстээ баяр хүргэе!

Sunday, April 24, 2011

Програмчлалын Улсын 21-р олимпиадын алдаа

Энэ удаад олимпиадын дүнг танилцуулахаас өмнө алдаануудыг бичихээр шийдлээ.

Эхний өдөр:
Ороод суухад лабораторын компьютерийн бэлтгэл ажил муу байсан. Жишээлбэл анх ороод суухад Deep Freeze програмыг унтраагаагүй байсан, үүнийг мэдэж байсан туршлагатай оюутнууд л хаалгасан. Эндээс үүдэж гарсан хамгийн муу үр дүн нь Дархан хотоос зорьж ирсэн Мөнхбаатарын эхний өдрийн бүх Source устсан. Бид бодолтоо тулгасан ба Мөнхбаатар дор хаяж 130 оноо авах байсан. Энэ бол КтМС-н цэвэр хариуцлагагүй байдал.
Ингээд эхний өдрийн дүн гарахад миний оноо 145 байсан ба 150 авна гэдэгтээ маш итгэлтэй байсан. Өргөдөл бичиж ороод би өөрөө тестийн алдааг олж илрүүлээд комисс хүлээн зөвшөөрч 4 хүүхэд 5 оноо нэмж авсан. Ороогүй байсан бол тэмцээний дүнд том өөрчлөлт орох байсан.

Хоёр дах өдөр:
Мөнхбаатарын бодолтыг сэргээж чадсангүй, ингээд тэдний хариуцлагагүй байдлаас болж бүхэл бүтэн 130 оноо алдаж байр эзлэх ямар ч найдваргүй болсон. Дүн гарлаа, уг нь дор хаяж 100 оноо авна гэсэн итгэлтэй байсан би 40 15 5 оноо авсан байв. 40 оноог бол би хүлээн зөвшөөрнө, 15-г ойлгож болно, 5 оноог огт ойлгосонгүй. Тэд өргөдөл хүлээн авах боломж өгөлгүй хүчээр бүх өргөмжлөлүүдийг бэлдээд бараг хүчээр дүнгийн хурал эхлүүлэв. 15 оноо авсан бодлого тест хэтэрхий сул байснаас Brute Force буюу хамгийн арга барсан аргаар бодсон хүмүүс 50 авч гайхал төрүүлэв.

Тэмцээний дараа Мөнх-Очир бид 2 миний 5 авсан буюу "tr" бодлогын бодолтыг зөв гэдэгт итгэлтэй байсан тул тестүүдийг аваад шалгаж үзтэл ихэнх тест бодлогын нөхцлийг хангаагүй буюу Гурвалжны тэнцэтгэл биш хангахааргүй өгөгдсөн байв. Мэдээж гурвалжин үүсэхгүй бол ямар хариу хэвлэх вэ дээ? Гэтэл зохиогч болон Өсөхбаатар-н бодолтууд хаанаас ч юм хариу олж хэвлээд тэдгээр нь таарсан. Би гурвалжны тэнцэтгэл биш нөхцлийг хангахгүй бол юу ч хэвлэхгүй гэдгийг кодондоо бичсэн. Энэ бодлогоны тест буруу байсан нь хамгийн том алдаа, хэрвээ энэ алдаа байгаагүй бол Би 1-рт байрт орж багаараа дахин цом хүртэх байлаа. Тэд өргөдөл хүлээж авах ёстой байсан, хэрэв хүлээж авсан бол би тэр алдааг дорхноо илрүүлж бүгдийг өөрчлөх байсан.

Бүх юм дууссан болохоор дараа жилийнхдээ л сайн бэлдэе дээ :)

Гэхдээ бид ижилхэн л оролцогчид учраас Өсөхбаатарт баяр хүргэе!

Tuesday, April 12, 2011

MNPC 2011 - SMCS багийн тэмдэглэл

Би (SMCS - Э.Хонгор) энд багийнхаа MNPC 2011-т хэрхэн оролцсон тухай бичихээр шийдлээ. Юуны өмнө MNPC 2011 нь Мөнх-Очир бид хоёрын хувьд оролцох боломжтой сүүлийн жил байсан болохоор амжилттай оролцохыг хүсч байсан ба санасандаа хүртэл оролцсондоо таатай байна. Мөн багийн уламжлал ёсоор дахин нэг гишүүн маань солигдсон билээ :p. Багийн шинэ гишүүн маань уг блог-н идэвхтэй админ болох Баасанбат юм. Тэмцээний үеэр олон бодлого байсан болохоор хэн яг ямар бодлого оролдож уншсаныг мартчихаж, багийн ажиллагаа байсан гэж ойлгоорой :).

За ингээд тэмцээнээ эхэлье :). Тэмцээн эхлэв 10 бодлого ирлээ. Бодлогыг хувааж аваад уншив аа, тэгтэл J бодлого N тооны эрэмбээрээ голын тоог ол гэнэ. Шууд STL-н sort ашиглаж бичээд явуултал TLE. N<=10^6 бас multicase 10 ширхэг байсан болохоор амжсангүй. Ингээд шууд хаяад A бодлогыг хартал өгөгдсөн тоонуудын нийлбэрийг ол гэнэ. Ингээд явуулаад 6 дахь минутанд AC. Тэгтэл манайхаас өмнө 2 баг AC авсан байв, J-г хэрэггүй оролдлоо :p. C бодлого N-с хэтрэхгүй хуваарьтай бүх зөв энгийн бутархайг эрэмбэлж гаргах бодлого байв, N жижигхэн байсан болохоор шууд бичээд AC (11 минут). Ингээд тэмцээний дүнг хартал маш бага хугацааны зөрүүгээр нэгт орлоо. Амархан бодлого олохын тулд бүх бодлогыг уншиж их цаг авав, тэгээд I бодлогыг уншиж дуусахад жаахан нуугдмал Bipartite Matching байсныг олоод шууд бичээд AC (41 минут). Дүнгээ хартал бас л тэнцчихсэн, хугацаагаараа арай бага болохоор 1т. Board-с ажиглаад B бодлого хялбар байж магадгүй санагдаад B-г Мөнх-Очиртой цуг жаахан бодсоны эцэст шууд томъёог олоод AC авав (64 минут). Дараагийн бодлого - F, уг бодлого өгүүлбэрээ ойлгосны дараа жижигсэн DP байсныг олов, бичиж байх зуураа дүн хартал дахиад л тэнцчихлээ, MTC-н 1-р багтай үнэхээр ширүүн өрсөлдөж байна даа, ингээд F-ээ дуусгаад AC(75 минут). Ингээд 5 бодлоготой болоод 1 оноогоор холдсон ч удалгүй өрсөлдөгч баг маань 5 бодлоготой болж тэнцэв. Бодлогуудаа уншсаар л, амархан бодогдчих бодлого олдолгүй удав. E бодлого MIS 2D(Maximum Interval Sum) -г олох бодлого, Мөнх-Очиртой хамтраад бичиж байтал арай жаахан удаж магадгүй санагдаад дуусгалгүй өөр бодлого харав. Тэгээд Баасанбатын уншиж байсан H-г DP + BFS гэдгийг харлаа. Маш урт өгүүлбэртэй бодлого байсан болохоор Баска-н тусламжтай хурдан ойлгоод бичив. Bug гарсан болохоор гурвуулаа нийлж тестлэж засаад явуулав. Алдаж магадгүй гэсэн айдастай байсан ч AC авлаа (154 минут). Яг энэ үед манайх 7 оноотой өрсөлдөгч 5 оноотой байсан болохоор жаахан тайвширлаа. Юмаа идэх нь идээд усаа уух нь уугаад бие засах нь заслаа. Ороод иртэл нөгөө баг 6 болчихжээ, яарахгүй бол болохгүй нь. Одоо бодох дутуу гурван бодлого нь D, G, J. J бодлогыг яг баталгаатай бодох арга олоогүй ч эцсийн арга гээд нэг арга олчихсон. D бодлогыг анх хараад ямар ч санаа олсонгүй. Brute Force бичээд жижиг тохиолдлоос зүй тогтлыг олов. Гурвуулаа нийлж байгаад томъёо гаргаад явуултал WA. Итгэлгүй байсан болохоор орхив. Тэмцээний дүнд өөрчлөлт ороогүй байсан болохоор өрсөлдөгч баг манайхыг ялахын тулд дор хаяж 2 бодлого нэмж бодох ёстой ба цаг бага үлдсэн байсан болохоор тайван байлаа, гэхдээ хамаагүй тайвширч болохгүйгээ мэдэж байсан болохоор J-г эцсийн аргаараа үзээд AC авав (228 минут). Одоо л тайвширч болохоор боллоо, гэхдээ D-г эцсээ хүртэл оролдсоор байв. Ингээд манай баг дахин түрүүлж хошой аварга боллоо. Бодлогын анализ дээр зохиогч D-н бодолтоо тайлбарлатал томъёо нь яг таарж байсан ба бодолтоо тулгатал маш жижигхэн алдаа байсан ба манай бодолт зөв болж rejudge хийхэд AC авав (208 минут). Ингээд 9 оноотой гэсэн үг, гэхдээ бусад багуудын аль нь ч бодож чадаагүй болохоор ялгаагүй гэж үзээд манай баг 8 оноотой үлдэхээр шийдсэн.

Бодлого Оролдлого Минут
A 1 6
C 1 11
I 1 41
B 1 64
F 1 75
H 1 154
E 1 170
D 1 203
J 6 228

Багийнхандаа баяр хүргэе!

P.S: Удахгүй бүх бодлогын өгүүлбэрийг оруулах болно.

Монголын Үндэсний Програмчлалын III Олимпиад

Монголын их дээд сургуулуудын оюутнуудын багуудын хооронд зохион байгуулагддаг Үндэсний Програмчлалын олимпиад 4.9-нд гурав дахь удаагаа амжилттай болж өндөрлөлөө. Тэмцээний дүнгээс дурдвал

1. МУИС - МКС 1-р баг - 8 оноо
Бүрэлдэхүүн : Хонгор, Мөнх-Очир, Баасанбат
2. МУИС - МТС 1-р баг - 6 оноо
Бүрэлдэхүүн : Өсөхбаатар, Жамсрандорж, Мөнхжаргал
3. МУИС - МТС 2-р баг - 6 оноо
Бүрэлдэхүүн : Хуягбаатар, Чинболд, Дөлгөөн
4. ШУТИС - КТМС 1-р баг - 4 оноо
Бүрэлдэхүүн : Амар, Адъяа, Гансүх
5. МУИС - МКС 2-р баг - 4 оноо
Бүрэлдэхүүн : Ганбат, Гончигдорж, Дөлгөөн
6. ШУТИС - КТМС 2-р баг - 4 оноо
Бүрэлдэхүүн : Баярмагнай, Чинбат, ?