競技プログラミング練習会

2019 Normal

第0回  初回説明, 環境構築

担当 :  aotsuki

自己紹介

自己紹介

  • 京都大学理学部 2回生
  • 本名:宮嶋 優大
  • ​​AtCoder:水色
  • 競プロでは主にC++を使用
  • ゲーム制作とweb開発をほんの少しだけ
  • ボードゲームとか麻雀やったりする
    • 好きな人は今度一緒にやりましょう
  • 楽しくやっていきましょう

KMC-ID : aotsuki

slack(部内チャット)

自己紹介

  • 京都大学工学部情報学科2回生
  • 本名:平井 雅人
  • AtCoder: かつては水色だった…(今は緑)
  • CとC++を普段使ってます。
  • aotsukiと交代で回していく予定です。
  • 今回はプログラミング基礎を担当します。
  • 皆さんと共に精進する所存です。よろしくお願いします。

KMC-ID:laft

皆さんの自己紹介もお願いします。

  • 名前(部員の方はKMC-ID)
  • 所属(大学など)
  • 使える言語や使う予定の言語
  • プログラミング経験や競プロの経験(もちろんなくても大丈夫!)
  • 趣味・特技・意気込みなど
  • 何か言いたいこと(あれば)

あくまで一例ですが、下を参考に

今日の内容

今日の内容

  • 競プロって何?

  • 環境構築

  • 競プロ練習会について

  • プログラミング基礎講座

  • コンテスト!!

競プロって何?

  • プログラミングによる問題解決能力を競う競技
  • 問題が出題され、それを解くようなプログラムを書きます
  • どれだけ多く、早く、正確に問題を解けるかを競います
    • プログラムの実行スピード等を競うわけではない
    • (が、これもある意味とても重要)

競プロとは

  • 問題を解くためには、発想力や応用力、知識(アルゴリズム等)などが必要です
    • パズルや謎解き、受験数学に似てるかも
  • プログラミングとかアルゴリズムとか分からない!
    • 大丈夫です!
    • これから一緒に学んでいきましょう!!!

競プロとは

例題

例題

どんな問題が出るのか実際に見てみましょう

 A + B Problem

整数 A と B が与えられる。

A + B を出力せよ。

-1000\leqq A , B\leqq 1000

制約

問題文

実行時間制限: 2 sec  / メモリ制限: 1024 MB

例題

サンプルケース

出力例

入力例

  1  3

  4

例題

このように競プロの問題は

  • 問題文  (Problem)
  • 制約   (Constraints)
  • 入力   (Input)
  • 出力   (Output)

の4つで構成されています

解答例(C++)

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b;              //変数宣言
    cin >> a >> b;        //入力
    cout << a+b << endl;  //出力
}

(これは解答の一例にすぎません)

解答を作り終えたら

デバッグ

(書いたコードが正しく動くかチェックします)

  • 以下の順に作業します

提出

(所定の解答欄にコードを貼り付け提出します)

結果発表

(合っていたか間違っていたか分かります)

結果の種類

  • 以下のような表示が出た時、正解となります。   
WA  (Wrong Answer)
RE   (Runtime Error)
​TLE  (Time Limit Exceeded)
誤答 間違った答えが出力されました
実行中エラー プログラムの実行中にエラーが発生しました
​問題で指定された実行時間以内にプログラムが終了しませんでした
  • 一方、次のような表示が出た時、不正解となります。

   間違いがないか確認しましょう。

AC  (Accepted)

正解 おめでとうございます

オンラインジャッジ

  • 先ほど説明したようなシステムをオンラインジャッジと言います
  • 過去にコンテストに出題された問題を解くことができます
    
  • この練習会でもこれを使ってコンテストを開きます
  • 有名どころは...
    • Aizu Online Judge
    • PKU Online Judge
    • (Virtual Judge)

オンラインジャッジ

オンラインコンテスト

  • オンラインで参加登録して、参加者が一斉に問題を解く
  • 有名どころは...

オンラインコンテスト

  • 日本語なので読める!
  • ほぼ毎週土曜か日曜に開かれます
  • コンテストの種類がいくつかあります
    • ABC (AtCoder Beginner Contest)       初心者向け、おすすめ、(次回  明日 21:00~)
    • ARC (AtCoder Regular Contest)        中上級者向け
    • AGC (AtCoder Grand Contest)        初中級者〜最上級者向け
  • 参加してみると良いかもしれません
  • 過去問演習もできます

AtCoder

プログラミング言語

  • いろいろありますが、競プロでよく使われているのは以下の言語
    • C / C++
    • Java
    • Python
    • ...
  • これ以外でもできるとは思います
    • しかし、今後みなさんに出てもらうことになるICPCという大会では、これらの言語しか使えないので注意!

プログラミング言語

  • プログラミング言語なんて全然知らないって人、いっぱいあって迷ってるって人!
  • C++」を使いましょう
  • 理由
    • 速い(競プロでは重要!)
    • この講義で出てくるサンプルコードをC++で書く予定だから
      • ただし他の言語を使う人でもわかるように書く(つもり)なので、C++以外の人も安心して下さい

プログラミング言語

環境構築

環境構築

競プロをするための準備をしましょう

  • エディタ
    • プログラムを書くためのソフト
    • 元から入っている"メモ帳"や"テキストエディタ"でも代用がきくが、これらはプログラムを書くためのものではない
    • プログラミング用のエディタを入れましょう(いろいろ便利!)
    • 代表的なものは"Atom","Visual Studio Code"とか
  • ウェブブラウザ
    • ​問題文を読んだり、コードを提出したりするため
  • コンパイラ
    • ​????
  • 人間が書いたプログラムは機械(コンピュータ)には分かりません
  • 機械にプログラムを実行してもらうためには、機械が理解できる言語に変換しなければいけない
  • その変換のことを「コンパイル」、変換を行うもののことを「コンパイラ」という

コンパイラ

  • 使う言語にあったコンパイラを入れましょう
  • 以下、例としてC++の環境構築を説明します
  • C++のコンパイラはいくつか種類があります
    • gcc
    • clang
  • 細かな違いしかありませんが、gccの方が良いかも

コンパイラ

​まず Terminal を開きます

以下のコマンドを入力します

Macの場合

g++  -v

なんか長いのが出てきた人

  • すでにC++のコンパイラは入ってます      

​"-bash: g++: command not found"と出てきた人

  • C++のコンパイラは入っていません 入れましょう

Macの場合

C++コンパイラの入れ方

  • App storeからXcodeをインストール     

空き容量が足りなくてXcodeを入れられない場合は僕に言って下さい(6GBくらいあります)

以上

Windowsの場合

多少めんどくさいです  

  • MinGW を入れる
  • パスを通す
  • Visual Studio Code を入れる         

詳しくはこのサイトを参考にして下さい

環境構築めんどくさい

そんなあなたに Wandbox !

  • Wandboxとは
    • オンラインでコードを実行してくれます
    • 環境構築不要
    • 標準入出力が使える
    • あらゆる言語をサポート
    • 便利!!!
  • ただし環境構築はしておいた方がいいかもしれません

Wandbox

競プロ練習会について

毎週の流れ

18:15  百万遍王将前集合 (4月中)

18:30  部室集合 (部室に直接来れる人はこの時間)

     講座 (毎週テーマが変わります)

19:00

     コンテスト!

20:50 ?

     解説 (あったり無かったり?)

21:00  終了

毎週の流れ

来週からの流れです

今後のスケジュール

  • 第1回 4/19(金)  18:30-21:00
     計算量, vector, string, 貪欲法

  • 第2回 4/26(金)  18:30-21:00
     累積和, しゃくとり法

  • 第3回 5/10(金)  18:30-21:00
     ソート, 二分探索, データ構造

  • 第4回 5/17(金)  18:30-21:00
     全探索, 深さ優先探索, 幅優先探索

  • 第5回 5/24(金)  18:30-21:00
     動的計画法

今後のスケジュール

・・・

Slack

  • 部内で使われているチャットツール
  • 部員なら誰でも使える
  • #kmc-procon というチャンネルがあります
  • 競プロ関係の質問があったらここに書くと良いです
    • 強い人が答えてくれます

Slack

ここまでで質問ありますか?

プログラミング基礎講座

プログラミング基礎

  • プログラミング経験がない、あるいは少ししかない向けに、競プロでよく使う知識を教えます。
  • 競プロでは、C++という言語が主流でおすすめなので、C++を例にとって話します。

プログラミング基礎

  • 一通りやりますが、完全な初心者の方は新しいことを大量に学ぶことになり、全てを覚えきられない可能性が高いです。
  • 分からない事があれば、後でやるコンテスト中にでも僕らに遠慮せずに聞きましょう。

別スライドになります

コンテスト!

  • 実際に問題を解いてみよう
  • 分からなくても大丈夫
    • 上回生がサポートします
    • なんでも聞いてください
  • 自分のPCを持ってきてない人は手をあげてください(貸し出します)

コンテスト

  • コンテストはAizu Online Judgeで行います
  • 会員登録をしましょう
  • 下記のURLにアクセスしてください

コンテスト

http://judge.u-aizu.ac.jp/onlinejudge/index.jsp?lang=ja

もしくは

「 AOJ 」で検索

  • 下記のURLにアクセスしてください
  • パスワードは "y" です
  • コンテスト開始までしばしお待ちください

コンテスト

https://onlinejudge.u-aizu.ac.jp/beta/room.html#kmc2019_n_0/info

もしくは

https://bit.ly/2TPgKia

(参考)難易度

  A ~ D 初心者用

      (プログラミング、競プロに慣れていない人)
  E ~ H 初級者用

      (競プロ少しだけやったことある人)
  I ~      中上級者用

      (競プロに慣れている人)

コンテスト

好きなものから解いていきましょう!

少しでも分からないところがあったら、手をあげて上回生に聞いてもらって大丈夫です

終わり!

解説して欲しいものありますか?

ごはん食べよう!!!

第0回:初回説明, 環境構築

By procon2019

第0回:初回説明, 環境構築

発表日時 2019年4月5日(金) 18:30-21:00 コンテスト:https://onlinejudge.u-aizu.ac.jp/beta/room.html#kmc2019_n_0

  • 520