v3rb0 Posted October 27, 2011 Report Share Posted October 27, 2011 or un hardkodētu ciparu tur mazliet pa daudz. ar tādu pieeju var atrisināt 1 zvaigžnu uzdevumus, bet netiksi nekur uz priekšu ar vairāku zvaigžņu uzdevumiem. varbūt uzreiz jau patrenējies un padomā kā varētu īsāk, ja zini cik dienu ir katrā mēnesī 2001 gadā. Quote Link to comment Share on other sites More sharing options...
codez Posted October 27, 2011 Report Share Posted October 27, 2011 (edited) Uzdevumam diena, var darīt pavisam vienkārši. ieraksti masīvā visu dienu skaitu mēnešo un ielasi dienas numur d. Tālāk ej, kamēr diena ir lielāka par tekošo mēnesi, kur katrā solī atņem no kopēja dien skaita mēnešu dienu skaitu un palielini mēnesi. Beigās izvadi atlikušo dienu skaitu un mēnesi. Mēnesim pieskaita 1, jo masīvs sākas no 0, kamēr pirmais mēnesis ir 1. http://paste.php.lv/...d71c6d?lang=cpp Otrs uzdevums principā pareizs, tikai abstrahēšana nepareiza. Izvadi failā, noteikti nevajag likt kopā funkcijā ar pašu aprēķinu, jo tās pilnīgi nesaistītas lietas. Ja gribētu abstrahēt, tev būtu jāveido funkcija, kas tikai veic datu konversiju. Taču praktiski, ja darbība netiek veikta vairākas reizes un ir tik īsa, funkciju saitīt atsevišķi nav nepieciešams. Un pilnībā pietiktu ar: cin >> n1 >> n2 >> n3; pensi = n3 + (n2 * 12) + (n1 * 20 * 12); cout << pensi / 100 << " " << pensi % 100; Edited October 27, 2011 by codez Quote Link to comment Share on other sites More sharing options...
laucinieks Posted October 27, 2011 Author Report Share Posted October 27, 2011 Ok, paldies ;)! L. Quote Link to comment Share on other sites More sharing options...
laucinieks Posted October 28, 2011 Author Report Share Posted October 28, 2011 Sveiki, Tātad tagad mēģinu atrisināt "Skaitļi 2". Kods ir - http://paste.php.lv/d06615fb928bb285bf803a021c3b7e82?lang=cpp Doma ir pārvērst visus int uz string un tad pārbaudīt ar find_first_of funkciju, jo uz int, šī funkcija man nestrādaja, bet nu palaižot programmu izmetas errors. Uzdevums - http://www.lio.lv/olimps/uzdevumi.php?show=35 Laucinieks. Quote Link to comment Share on other sites More sharing options...
codez Posted October 28, 2011 Report Share Posted October 28, 2011 (edited) 1) Tak pamekeklē googlē kā c++ pārvērš int par string. Lūk, piem., man google izmeta stack tieši tādu jautājumu ar neskaitāmiem veidiem atbilžu: http://stackoverflow...ger-to-string-c 2) Tev nevajag tur string. Uztaisi funkciju, kura pārbauda vai cipars ir skaitlī, ņemot ciklā, dalot ar 10 un skatoties atlikumu dalot ar 10. Respektīvi atlikums dalot ar 10 ir pēdējais cipars, bet dalīšana ar 10 nogriež pēdējo ciparu. to dari līdz pārbaudāmais ir 0. bool isdigit(int n, int c){ //... } Edited October 28, 2011 by codez Quote Link to comment Share on other sites More sharing options...
laucinieks Posted January 20, 2012 Author Report Share Posted January 20, 2012 Sveiki, Tā kā programmēšanas olimpiāde, vairs nav aiz kalniem, un esmu cītīgi gatavojies, ir radies iespējams viens no pēdējiem jautājiem. Nolikumā - http://vip.latnet.lv/lio/DOKI/Inform%C4%81tikas_nolikums_2011_mo.pdf 5.2.1 d) punktā ir rakstīts, ka drīkst izmantot programmēšanas valodu dokumentāciju. Tā dokumentācija ir noderīga, un cik plaša viņa ir? Praktiski, ja tu aizmirsti, kā kaut ko uzrakstīt, vai kādu funkciju, vai tu viņā vari atrast visu? Ar cieņu, Laucinieks Quote Link to comment Share on other sites More sharing options...
codez Posted January 20, 2012 Report Share Posted January 20, 2012 Šķiet, ka šī ir tā dokumentācija: http://lio.e-spiets.lv/prog/ Quote Link to comment Share on other sites More sharing options...
laucinieks Posted February 11, 2012 Author Report Share Posted February 11, 2012 Sveiki, Tā kā otrdien jau ir olimpiāde, tad pēdējais jaut. - par cik ir atļauts ņemt līdzi savus datorus, doma ir ņemt līdzi un izmantot Codeblocks, jo esmu jau ļoti pieradis pie tā. Bet cik atradu, tad tur var izvēlēties GNU C++ 3.4.2 ; Microsoft Visual C++ 2008 un GNU C++ 4.1.1 kompilatorus testēšanai. Tātad jautājumi - vai varēs izmantot Codeblocks - rakstīšanai? Ja varēs, kuru no compilatoriem, vislabak izmantot pie globālās testēšanas? AC, L. Quote Link to comment Share on other sites More sharing options...
laucinieks Posted February 14, 2012 Author Report Share Posted February 14, 2012 Sveiki, Tātad par šī paša gada uzdevumiem, 18:00 zināšu visus rezultātus. Ir daži jautājumi - Uzdevumi - http://lio.e-spiets.lv/2012/Rajons2012_vec.pdf 1) No cik punktiem parasti tiek uz valsti? Bija 2 lietas, kas sagādāja problēmas atrisināt uzdevumus - 2) Otrajā uzdevumā, uztaisīju tikai, lai pārbauda visus skaitļu summu no sākuma līdz beigām, šeit punkti būs vismazāk, jo atkal radīja problēmu - pārbīdīšanās par ciklu, ceru ka sapratāt, ko domāju. 3) Trešajā uzdevumā it kā viss būtu skaidrs, bet nesaprotu 1. piemēru, kā viņi tur dabū 5, jo man praktiski sanāk 6 tur. It kā pārējiem testa uzdevumiem viss bija pareizi. Varbūt variet, kāds, iemest arī kā Jūs tos uzdevumus risinātu? Savējiem risinājumiem vairs netieku klāt, tāpēc nevarēšu iemest. Ar cieņu, L. Quote Link to comment Share on other sites More sharing options...
codez Posted February 14, 2012 Report Share Posted February 14, 2012 (edited) 1. uzdevums. Zobratiem pa vidu nav nozīmes, svarīgi tikai tikai sākuma un beigu. tātad beigu zobrats pagriezās par K * m[0]/m[n-1] reizēm. Tā kā atbilde bija jādod kā daļskaitlis, tad izrēķinam veselo daļu un atlikušajai izrēķinām LKD, ar kuru izdala saucēju un skaitītāju, lai noīsinātu daļu. Jālieto bija long long mainīgie, jo bija reizinājums 10^9*10^9, kas int tipa mainīgajā nesaiet. sarežģītība: O(1) 2.uzdevums. ejam no pirmās pēc kārtas un ņemam katru kartiņu. Pie katras kartiņas skaitam līdzi, cik tajā vietā no sākuma ir starpība starp zilajām un sarkanajām kartiņām, 0, -1, +1, -2, +2, utt., un skaitam summu no sākuma. Tad pie katrā pozīcijā, glabājam tādai starbībai minimālo summu un maksimālo labāko vērtību, kas ir starpība starp pašreizējo summu un pirms tam bijušo mazāko summu pie tādas zilo un sarkano kartiņu kartiņu starpības. 1,-2,2,-2,5,10,3,3,3,-7,8 tātād atbilstošais zilo un sarkano starpību skaits un summa no sākuma līdz attiecīgajai vietai: 1 0 -1 0 1 0 1 0 1 0 1 -1 1 -1 4 14 17 21 14 22 šos datus var rēķināt ejot cauri un masīvā glabājot tikai zilo un sarkano starpībai atbilstošo minimālo summu. pēc šī var redzēt, ka maksmālā starpība veidojas pe kartiņu starpības 0 un ir 22 - (-1) = 23. sarežģītība: O(N) 3.uzdevums Šeit jāizveido koka struktūra, kuru ērti varētu uztaisīt, glabājot katrai pilsētai masīvā šadu struktūru: struct town{ int maxtime; int postmen; int shipments; list<int> childs; }; tālāk ar rekursiju ejam cauri uz skatamies, kāds ir maksimālais laiks, ko patērēja kādā no bērna atzariem un kāds, kurus uzzinam ar rekursijas funkciju un saskaitām kāds ir kopējais pastnieku skaits. sarežģītība: O(N) Edited February 15, 2012 by codez Quote Link to comment Share on other sites More sharing options...
laucinieks Posted February 15, 2012 Author Report Share Posted February 15, 2012 Skaidrs, Tagad būs jāmēģina tie vēlreiz atrisināt, un jāmēģina atrast labāks risinājums. Par pirmo uzdevumu, tur bija problēmas ar tām daļām, jo praktiski tās daļas es diezgan sarežģīti aprēķināju, un man sanāca, ka testa uzdevumos ir pareiza atbilde, bet pārējos testos 20% laiks pārsniedz max. laiku (0.21/0.2 0.206/0.2 u.t.t.) un 20% ir tādu kuriem ir nepareizs rezultāts (ar daļām). Pēdējais uzdevums liekas vispār nav ieskaitīs, jo testa pirmais piemērs nebija izpildīts (ar to 5). Otrajā uzdevumā 10% pareizi, kopā pašlaik 58 punkti. Godīgi sakot esmu vīlies sevī, un tagad gatavošos daudz cītīgāk nākošajam gadam ;). AC, L. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.