オリンピアヌドプログラミングに぀いおの少幎



こんにちは、Habr

9幎生が、あなたに手玙を曞いおいたす。これは、情報孊における党ロシアのオリンピックの地域段階でメダリストです。 最近、プログラミングオリンピックぞの関心がhabragiteliの間で高たっおいるこずに気付き始めたした。 圌らの積極的な参加者ずしお、私はすべおの質問に答え、私の道に぀いお話し、芚えおいる実際のタスクの䟋を挙げようずしたす。



トレヌニングに぀いお



私は孊校で物理孊、数孊、コンピュヌタヌサむ゚ンスの詳现な研究をしおいたす。

これはどのような孊校で、どのように勉匷し、どのように入孊するのですか
遞択は2段階で行われたす。 最初は物理孊ず数孊の詊隓です。 圌の埌、幞運な人がむンタビュヌを受け、数孊のいく぀かのオリンピックの問題を解決する必芁がありたす。 そしおその埌、最も知的で成功した人が孊生になりたす。

孊習は非垞に困難です。 教垫は、ほがすべおの科目の完党な知識を必芁ずしたす。 芪䌚議で、圌らは次のように述べたした。「トレヌニングの開始時に、絶察にすべおの生埒は2人になりたす。優秀な生埒でもです。 本圓に勉匷し始めた人は良い成瞟を取りたす。 残りは排陀されたす。」 䜕よりも、ロシア語の蚀語ず文孊に問題がありたしたが、奇劙なこずかもしれたせん。




私は垞にプログラミングに魅了されおきたしたこれは4幎生ですでに理解されおいたこずです。 パスカルずさたざたな蚈算アルゎリズムが7幎生で教えられ始めたずき、私は非垞に喜んでいたした。 そのずき、最初の「Hello World」、ナヌクリッドアルゎリズムを曞きたした。 条件付きステヌトメント、ルヌプ、配列を怜蚎したした。

8幎生から、教垫はコンピュヌタヌサむ゚ンスの遞択科目に招埅され、そこでグラフ、配列゜ヌトアルゎリズムなどを孊びたした。



タスク



オリンピアヌドの初心者プログラマヌのための完党に兞型的なタスクを芋おみたしょう
ファむブファむブ-25

時間1秒。メモリ16 Mb耇雑床8

VasyaずPetyaは同じクラスで孊校に行きたす。 最近、PetyaはVasyaに5で終わる自然数を2乗するトリッキヌな方法に぀いお話したした。Vasyaは5で終わる2桁さらには3桁の数字を簡単に2乗できたす。方法は次のずおりです。 5で終わる堎合は、最埌の5぀を次の番号で削陀するこずにより、元から取埗した数を乗算するだけで十分です。その埌、右偎の結果に「25」を割り圓おるだけです。 たずえば、125を2乗するには、12を13倍しお25を割るだけで十分です。 番号12 * 13 = 156番号25に起因するず、結果15625が埗られたす。 1252 = 15625。 Vasyaがスキルをテストできるように、5で終わる数字を四角で囲むプログラムを䜜成したす。

入力デヌタ

入力ファむルINPUT.TXTの唯䞀の行には、4 * 10 ^ 5を超えない、5で終わる正の敎数Aが1぀含たれおいたす。

むンプリント

出力ファむルOUTPUT.TXTで、1぀の正の敎数先行れロなしのA2を出力したす。

䟋

INPUT.TXT

5

75

4255

OUTPUT.TXT

25

5625

18105025





必芁条件


Olympiadは、受け入れられた蚀語通垞、このセットはPascal私自身が曞いたもので、問題はなかった、Delphi、C ++、Java、Visual Basic、最近远加されたC、Pythonのいずれかでプログラムを䜜成する必芁がありたす。 その埌、゜ヌスファむルはサンドボックスシステムに送信され、そこでテストグルヌプでコンパむルおよび実行されたす。 各テストに぀いお、オリンピアヌドの参加者は特定のスコアを受け取り、合蚈したす。 オリンピック埌、結果は誰にでも芋えるようになりたす。 合蚈スコアが高いほど、堎所が高くなりたす。

原則ずしお、怜蚌システムがマネヌゞコヌドJava、Cを適切に凊理しないこずは泚目に倀したす。 個人的には地域の段階で私の友人は、すべおが正垞にチェックされたものの、実行時゚ラヌCで蚘述のために4぀のタスクのうち3぀で0ポむントを受け取りたした。 この堎合、私も圌も䜕をすべきか理解しおいたせんでした。 控蚎審では、ju審員は単に肩をすくめた。



リスク


䜕を倱うこずができたすか ゚ラヌには次の7皮類がありたす。

非衚瀺のテキスト
間違った答え

回答が無効です。 プログラムの結果はju審員ず䞀臎したせん

プログラムの誀った出力圢匏たたはアルゎリズム゚ラヌ



制限時間を超えたした

タスクで指定された制限時間を超えたした。 プログラムは蚭定時間より長く実行されたす。

プログラムの無効な解決策たたはアルゎリズム゚ラヌ



プレれンテヌション゚ラヌ

OUTPUT.TXT出力ファむルがありたせん

出力ファむルを開く前にファむルが䜜成されない、無効なファむル名、たたはプログラムがクラッシュする



コンパむル゚ラヌ

コンパむル゚ラヌ。 コンパむルの結果、実行可胜ファむルは䜜成されたせんでした

プログラムたたはファむル拡匵子の構文゚ラヌが正しく指定されおいたせん。 Javaで実装するずきに、Main以倖のクラスが䜿甚された可胜性がありたす



メモリ制限を超えたした

タスクで指定されたメモリ制限を超えたした。 プログラムは、むンストヌルされおいるメモリサむズ以䞊を䜿甚したす。

非効率的なアルゎリズム、たたはメモリの誀割り圓お



ランタむム゚ラヌ

実行゚ラヌ。 プログラムはれロ以倖の戻りコヌドで終了したした。 この堎合、䜜業の結果は確認されたせん。

おそらく、プログラムには、配列の存圚しない芁玠、れロ陀算などぞのアピヌルがありたした。 おそらく、C ++プログラムが「return 0」ステヌトメントで終了しおいないか、他の䜕らかの理由でれロ以倖の戻りコヌドを返した可胜性がありたす。





オリンピック



情報孊における党ロシアのオリンピックはどうですか

孊校での8-9孊幎、孊校での8-11孊幎、垂営ステヌゞ、地域オリンピアヌドの遠足ツアヌ、地域オリンピアヌドの5぀のステヌゞのみを経隓したした。 次は党ロシアツアヌですが、残念ながら私はそれに乗りたせんでした。 次に、私が本圓に気に入ったタスクに぀いお説明したす。



高校生のステヌゞ


ツアヌ䞭に、8幎生から11幎生の間でタスク「倚項匏ハッシュ関数」があり、その条件は2ペヌゞのA5圢匏で蚘録されたした。 この条件では、ハッシュ関数ずその履歎に関する簡単な情報が提䟛され、そのような関数の1぀が提案されたした。 タスクは、入力デヌタの配列に察しお蚈算するこずでした。 非垞に恐ろしい名前、耇雑な甚語、その量をアむコン文字Eのように芋えるもので蚘録するこずに怖がっおおり、その結果、決定する人さえほずんどいたせんでした。 残念ながら、今はその状態を芋぀けるこずができたせん。



垂営ステヌゞ


地方自治䜓の段階は、耇雑さが単玔に殺人的なものであるこずが刀明したした。

ここからタスクです
B.ビヌバヌ

制限時間テストごずに1秒

メモリ制限64 MB

ビヌバヌは、狭い川の氎路にダムのカスケヌドず居心地の良い小屋を建蚭しようずしおいたす。 川は理想的にたっすぐな道に沿っお流れ、川の幅は非垞に小さいため、このタスクの枠組みでは無芖できたす。 ビヌバヌが建蚭に䜿甚できる川のほずりに朚がありたす。 科孊者は、ビヌバヌがダムや小屋を建蚭する堎所を、朚を茞送するのに必芁な最短距離の芳点から最適に遞択する方法を芋぀けるこずにしたした。

川の盎線区間の始点に察する暹朚の䞎えられた座暙に埓っお、同じ方向の流れの軞を数える堎合、暹朚が移動しなければならない最小合蚈距離に察応するオブゞェクトの座暙を決定するプログラムを曞きたす。

入力フォヌマット

入力の最初の行には、1぀の正の敎数1 <= T <= 10が含たれたす-次々に進むテストブロックの数。 各テストブロックの最初の行には、2぀の正の敎数1 <= N <= 1000、0 <= M <= 10、0 <= L <= 100-それぞれ、川の土手に生えおいる朚の数、建蚭に必芁な朚の数が含たれおいたす1぀のオブゞェクトず、組み立おる必芁があるオブゞェクトの数。 次のN行のそれぞれに、正の実数のみが蚘録されたす。これは、川の盎接セクションの開始点最䞊流から察応するツリヌが成長する堎所たでのメヌトル単䜍の距離です。 すべおのオブゞェクトを構築するのに十分なツリヌが保蚌されおいるこずが知られおいたすN> = M * L

出力圢匏

テストブロックごずに、個別の行に、単䞀の数字を衚瀺する必芁がありたす-構築のためにツリヌを移動する必芁がある総距離が最小になるように、オブゞェクトを盎立させる堎所の座暙の合蚈で、小数点以䞋の3぀の正確な蚘号を瀺したす。

入力および出力デヌタの䟋

入力デヌタ

2

5 3 1

0.1

1.2

5.6

7.3

9.4

2 2 1

1

2

むンプリント

7.300

1,000





オブゞェクトだけで十分な堎合、問題を解決したす。 しかし、より倚くのオブゞェクトがある堎合は、かなり耇雑なプログラミングセクション「動的プログラミング」を適甚する必芁がありたす。 私たちの教授陣で教えた教垫は、この問題を解決する方法に぀いおのアむデアが乏しいこずを認めたした䞀緒に䜜業するこずで、いく぀かのグラフを䜜成するだけで最小化する必芁がある倀を思い付きたした。

その結果、オリンピアヌドの1人の参加者のみが党埗点の問題を解決したした。



そしお、ここに別のタスクがありたす。審査員の決定が修正されたした同じ自治䜓の段階から。
A.アルバトロス

制限時間テストごずに1秒

メモリ制限64 MB

アルバトロスは、海の広がりを越えお長い距離を乗り越えお、長い飛行を行うこずができたす。 鳥類孊者は、アホりドリが陞地に行かなくおも䜕キロメヌトル飛ぶこずができるかを決定するこずにしたした。 このために、浮遊する研究宀の小隊が海䞭に散らばり、RFIDタグが取り付けられた調査察象者のデヌタを蚘録したした。 科孊者は、アホりドリを発芋した堎所の時間ず珟圚の座暙を蚘録したす。

芳枬ゟヌンで、惑星が半埄6,366,197キロメヌトルの理想的な球であるず仮定した堎合、実隓䞭にアホりドリが移動した距離を決定するプログラムを䜜成したす。

入力フォヌマット

入力の最初の行には、1぀の正の敎数1 <= T <= 10が含たれたす-次々に進むテストブロックの数。 各テストブロックの最初の行には、アホりドリの出珟に関するレコヌド数である2 <= N <= 1000の正の敎数が1぀含たれおいたす。 次のN行のそれぞれには、12個の非負敎数0 <= d1 <= 90、0 <= m1 <= 90、0 <= s1 <= 90、0 <= d2 <= 90、0 <= m2 < = 90、0 <= s2 <= 90、0 <= h <= 23、0 <= mt <= 59、0 <= sec <= 59、1 <= dd <= 31、1 <= mm <= 12 、2000 <= yy <= 2012-浮䜓研究所がアホりドリに気づいた堎所の北緯の床数ず秒、西経の床数、分ず秒。 時間、分、秒の圢匏の時刻、日、月、幎の圢匏の芳枬日。

出力圢匏

テストブロックごずに、個別の行に、単䞀の敎数アホりドリが移動した距離を最も近い偶数の敎数に䞞めた倀を衚瀺する必芁がありたす。

入力および出力デヌタの䟋

入力デヌタ

2

3

0 0 0 0 0 0 0 0 0 0 0 1 1 2012

0 0 0 0 2 0 0 0 0 3 1 2012

0 0 0 0 1 0 0 0 0 2 1 2012

2

0 0 0 0 0 0 0 0 0 0 0 1 1 2012

0 0 0 0 1 0 0 0 0 2 1 2012

むンプリント

4

2



かなり単玔なタスクアルバトロスが出珟した日付で倀を゜ヌトし、2぀のポむント間の各アヌクの長さを蚈算しおから、それらをすべお加算する必芁がありたす。 この決定は、ピタゎラスの定理の䜿甚を可胜にする決定で行われたす。

しかし、なぜ決定が再考されたのですか 分ず秒の範囲を芋おください。

0 <= m1 <= 90、0 <= s1 <= 90

おそらく、1床で60分ず単玔に仮定したのでしょうか それずも1分60秒で䜕が起こるのでしょうか ハハ すぐに「90」ず曞き蟌たれたす。

テストは、特に1床60分、1分60秒で翻蚳を考慮しお行われたした。 この䞍名誉は、私たちの教垫によっおうたく挑戊されおいたす。

最も厄介なのは、䟋でさえ間違っおいるこずが刀明したこずです

その結果、私の意芋では、誰も問題を解決したせんでした。



垂町村の段階の党文はここにありたす 。

距離ツアヌ


距離ツアヌのタスクははるかに興味深いものでした。 私は2぀のタスクを芚えおいたす。

これが最初です
G.今日のヒヌロヌ

I / O暙準

制限時間1秒

Perm Velikayaメディアホヌルディングは、Perm Kraiブロガヌの投皿をフォロヌしおおり、毎日、䌝統的なヒヌロヌオブザデむの芋出しにこの人物を含めるために、レコヌディングで最も人気のある人物を芋぀けようずしたす。

远跡リストの各゚ントリに぀いお、ビュヌの数ずそれに蚘茉されおいるパヌ゜ナリティがわかりたす。 蚀及された゚ントリの合蚈ビュヌ数が最倧の人を識別するプログラムを䜜成したす。

入力フォヌマット

入力の最初の行には、単䞀の敎数1 <= L <= 10000-珟圚の日にレビュヌされたレコヌドの数が含たれおいたす。 次の各行では、番号が最初に瀺されたす-察応するレコヌドのビュヌの数、次にレコヌドで蚀及された人々の名前ず姓。 名前ず姓は、英語のアルファベットの文字、数字、および隣接するすべおの単語がちょうど1぀のスペヌスで区切られおいたす。 ストリングの合蚈の長さは200文字以䞋です。

出力圢匏

出力の1行に、レコヌドが最も倚くのビュヌに蚀及しおいる人の名前ず姓を衚瀺する必芁がありたす。 そのような人が耇数いる堎合は、他の人よりも先に行く人をアルファベット順に出力する必芁がありたす。

入力および出力デヌタの䟋

入力デヌタ

1

100500ゞョン・トラボルタゞョン・レノン



5

5ノァシャ・パプキンセルゲむ・シロ゚ゞキン

10ハリヌ・ポッタヌ

5ギャリヌ・ポッタヌ・ノァシャ・パプキン

5セルゲむ・シロ゚ゞキン

12341234463456234123466543342アヌノルド・シュワルツェネッガヌ

むンプリント

ゞョン・レノン

アヌノルド・シュワルツェネッガヌ





このタスクの埌に、「蟞曞」ずいうアむデアが思い浮かびたした。これは、人を簡単に怜玢できるデヌタ型です。 誰もが興味を持っおいる堎合-私はコメントで曞いお、あなたはPMで尋ねるこずができたすが、私はこれが別の自転車だず感じおいたす。

ビュヌの総数を持぀人のリストを䜜成する必芁がありたすArnold Schwarzenegger識別子を持぀人を芋おください。長い算術挔算が必芁です。次に、リストから目的の人を遞択したす。 アルゎリズムを簡玠化するため、11幎生は名前にハッシュ関数名前に含たれるすべおのASCII文字番号の合蚈を䜿甚したした。これにより、プログラムが倧幅に加速され、衝突は小さくなりたした。



2番目のタスクたたはアヌカむブのタスク
B.偉倧なアヌカむバヌ

I / O暙準

制限時間1秒

地球䞊のロボットは、自動ワヌドプロセッシングが非垞に奜きです。 このため、ロボットはGreat Archiverの特別な地䜍を導入したした。 Great Archiverの責任には、テキスト内のすべおの単語のリストを䜜成し、リスト内のその単語の数を瀺す数字で単語を眮き換えるこずが含たれたす。

Great Archiverの機胜を実行するプログラムを䜜成したす。

入力フォヌマット

入力の1行には、長さが100䞇文字以䞋の行が含たれたす。これは、英語のアルファベットの小文字ず倧文字ずスペヌスで構成されたす。 テキスト内の2぀の隣接する単語は、ちょうど1぀のスペヌスで区切られたす。 単語は、文字列比范の芳点で等しい堎合、小文字ず倧文字が異なるず芋なされる堎合、同䞀ず芋なされたす。

出力圢匏

1行の出力では、䞀連のテキストワヌドを衚瀺する必芁があり、リスト内のワヌドは、テキストに衚瀺される順序で䞊べる必芁がありたす。 単語の番号付けは、単䜍で始たる必芁がありたす。

入力および出力デヌタの䟋

入力デヌタ

あるかどうか

なぜりィリヌを泣くのかなぜりィリヌを泣くのか

むンプリント

1 2 3 4 5 2

1 2 3 4 5 1 2 3 4 1 5 1 5 1 5 1



入出力の䟋の説明2番目の䟋のテキストには、改行文字ず埩垰文字が含たれおいたせん。





かなり単玔な圧瞮アルゎリズム私は䜕ず呌ばれおいるのか芚えおいたせん。 実装に興味がありたした。 単語の配列を䜜成し、そこに最初の単語を远加しお、この問題を解決したした。 次に、次のすべおの単語を読み、配列内にあるかどうかを確認したした。 そうである堎合-出力ストリヌムにワヌド番号を曞き蟌み、そうでない堎合-配列に远加しお、番号を曞き蟌みたした。

基本的に、私の決定は完党なスコアを取埗したせんでした。

課題の党文はこちらで確認できたす 。

遠埁では、9幎生の䞭で1䜍になりたした。

地域ステヌゞ


地域の段階では、それはそれほど面癜くありたせんでした; 2぀のラりンドがありたした。 私は孊校をひどく芋せるために、孊校を次の段階に行かせずに行かせるこずを恐れおいたした。 したがっお、タスクはそれほど楜しくなく快適でした。 䞀般的に、私はそこから䜕も芚えおいたせんでしたが、切望された卒業蚌曞を受け取りたした。 はい、条件が芋぀かりたせんでした。

2日目には、地元䌁業「予枬」の代衚者がやっおきお、「䜕」 どこ い぀」、クむズを開催したした。 受賞者には賞が䞎えられたした。



準備する



どのように準備したしたか

答えはずおも簡単です。私には良い先生がいたす。 私にずっおは面癜かったし、起こっおいるこずすべおを楜しんだ。 私は䞀生懞呜準備し、私が欲しかったものを手に入れたした。



あなたもこれに興味があり、このすべおに参加したい堎合はどうしたすか

  1. オリンピックのプログラミングのために孊生を準備するためのシステムがあり、テストシステムず゜リュヌションを備えた倚くの条件がありたす。 私が理解しおいるように、このようなシステムではすべお登録が必芁です。 次の2぀を䜿甚しお準備したした。
    • acmp.ruさたざたな耇雑さのタスクがたくさんありたす。セクション「オリンピアヌドのコヌス」も興味深いです
    • http://acm.timus.ru/さたざたなコンテストのタスクの集たり。䞀郚は英語です。 セクションhttp://acm.timus.ru/offlineでは、リモヌトおよび地域のステヌゞを実斜したした。
  2. オンラむンオリンピックがありたすが、私は1぀だけに参加したしたりクラむナからのNetOI 。 レビュヌは次のずおりです。HARDCOR!!! 私は2回戊より先に進たなかった。 コヌドは非垞に最適に蚘述する必芁がありたす方法はわかりたせん。テストごずに個別の条件がありたす審査プログラムの時間が2倍になりたす。




次は



これを蚀うこずで、私はオリンピックが実際の状況で働くためにどのように適応されるかずいう問題を意味したす。

私はただIT業界で働いおいたせんが、私は信じおいたすオリンピアヌドは実際の仕事に適応しおいたせん。 このようなオリンピックでは、アルゎリズムをよく理解するために、「自転車」をすばやく発明できる必芁がありたす。 私の友人ず私は小さなゲヌムを曞いおいたすが、あなたの目暙に合ったテクノロゞヌを遞択できるこず、開発をスピヌドアップする既補の゜リュヌションを芋぀けるこずができるこずははるかに重芁だず理解しおいたす。「自転車は必芁ありたせん。」 そうでない堎合は修正しおください。

誰かが私の人生に欲しいものに興味があるなら、実際、私はITずコンピュヌタヌサむ゚ンスがあたり奜きではないので、私の倢は理論物理孊者になっお研究をするこずです。 ロシア連邊ではこれに問題があるので、カナダたたはアメリカに向けお出発する予定です。



私は、PMたたはコメントで垌望を受け入れたす。 この蚘事が長続きしないこずを願っおいたす。 圌女がおもしろかったず思いたす あなたが私の非識字に悩たされおいないこずを願っおいたす。句読点はあたりよくわかりたせん。



トピックの写真では、 www.psu.ruの写真が䜿甚されたした



All Articles