編集  

競技プログラミング単語

キョウギプログラミング

競技プログラミングとは、プログラミングの技術を競う競技である。

概要

競技プログラミングは与えられた問題を制限時間内に解くプログラムコードを作製する技術を競う競技である。プログラミング大会の制限時間は数十分から数週間まで様々であるが、競技として開かれる大会は1~2時間程度で解答が完成する規模である。それ以上は競技というよりコンテストと呼んだ方がいいだろう。

競技プログラミングの大会は、webサイトに自分で書いたソースコードを提出して、プログラムに判定させる「オンラインジャッジシステム」が流。 速度の問題で、使われるプログラミング言語の割合は、c++>Python>c#=c>Java>>その他 といった感じらしい。

windows.hライブラリLinuxコマンドのような、アプリケーションコンピュータそのものの知識ではなく、数論を始めとした様々なアルゴリズムの知識と数学の素養、特にアルゴリズムの構成められる。

AtCoderから簡単な例題

500 円玉を A 枚、100 円玉を B 枚、50 円玉を C 枚持っています。これらの硬貨の中から何枚かを選び、合計額をちょうど X 円にする方法は何通りあるでしょうか?

【入
は以下の形式で標準入から与えられる。

A
B
C
X

【制約】
0≤A,B,C≤50
A+B+C≥1
50≤X≤20000
A,B,Cは0以上の整数である
X は 50 の倍数である

C言語の解答例


#include <stdio.h>
int main()
{
int A,B,C,X;
int a,b,c;
int ans=0;
scanf("%d",A);
scanf("%d",B);
scanf("%d",C);
scanf("%d",X);
for(a=0;a<=A;a++)
{
for(b=0,b<=B;b++)
{
for(c=0;c<=C;c++)
{
if(500*a+100*b+50*c==X)
{
ans++;
}
}
}
}
printf("%d",ans);
return 0;
}

このコードは「(a,b,c)の全ての組合せで実際にXと一致するか総当たりでチェックする」という、単純だが人でやったら非常に時間がかかる一方でコンピュータならすぐに終わる、というアルゴリズムになっている。

人間が数式で示すような方法をコードに起こしてもいいが、この例題のようにコンピュータにとって理解しやすいアルゴリズムは簡潔なコードになる傾向にある(模範解答がそうなるように問題を作ってあるというのもある)。

問題は数論が多い傾向にあり、Xnを8ケタくらいの素数で割った余りめさせる問題などは基本問題である。様々なアルゴリズム実装に慣れていないと解答の方針すら分からず終わってしまう可性もあるが、正答を得られた時は苦労に見合った達成感があるだろう。

主要な競技プログラミングコンテスト

関連動画

関連項目


【スポンサーリンク】

スマホ版URL:
http://dic.nicovideo.jp/t/a/%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
ページ番号: 5538354 リビジョン番号: 2615047
読み:キョウギプログラミング
初版作成日: 18/08/11 10:21 ◆ 最終更新日: 18/08/11 10:33
編集内容についての説明/コメント: 競技コンテスト追加
記事編集 / 編集履歴を閲覧
このエントリーをはてなブックマークに追加

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

競技プログラミングについて語るスレ


まだ掲示板に書き込みがありません… 以下のようなことを書き込んでもらえると嬉しいでーす!

  • 記事を編集した人の応援(応援されると喜びます)
  • 記事に追加して欲しい動画・商品・記述についての情報提供(具体的だと嬉しいです)
  • 競技プログラミングについての雑談(ダラダラとゆるい感じで)

書き込みを行うには、niconicoのアカウントが必要です!


急上昇ワード
ニコニコニューストピックス
  JASRAC許諾番号: 9013388001Y45123
  NexTone許諾番号: ID000001829