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

2020 Normal

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

担当 :  zeke.kidman7

Zoom配信について

Zoom配信について

  • 新型コロナウイルスの影響で部室で、できないのでZoomでやることになりました
  • 使い方に関して、何か質問ありますか?
  • 機能として、チャット、画面操作などを使っていきたいと思います
  • とりあえず、この画面を見れているならばよさそう

Zoom配信について

  • 自分もZoomには慣れていないので、不手際があれば申し訳ない…
  • なんか40分の制限があるので第一部、二部みたいな感じで移っていきます
  • 詳しくはSlackの告知を見てね

自己紹介

自己紹介

  • 京都大学工学部工業化学科 2回生
  • 本名:岡島 和希
  • ​​AtCoder:水色(AtCoder:zeke)
  • 競プロではC++を使用
  • プログラミング自体を去年の、この時期から始めた
  • まだまだよわよわなのです…
  • 若輩者ですが、よろしくお願いします

KMC-ID : zeke(ジークと読みます)

slack(部内チャット)

自己紹介

KMC-ID:kidman7

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

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

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

今日の内容

今日の内容

  • 競プロって何?

  • 環境構築

  • 競プロ練習会について

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

  • コンテスト!!

経験者に向けて

経験者に向けて

  • ここからは競プロ未経験者のための講座になります
  • 競プロ何も知らん…という人や気になる方は続けて聞いていってください
  • 経験者用にバーチャルコンテストを用意しました
  • 全てAtCoderBeginnersContestの過去問で難易度は黒~青です

コンテスト!

  • https://vjudge.net/contest/366591#overview
  • がコンテストページです
  • 問題文は英語なので、ページ上部のリンクから原文(日本語)に飛べます
  • 提出はもとの英語の問題ページに"Submit"があるので、そこから出してください
  • 分からないことがあれば、チャットで聞いてください!

難易度(目安)

  • A~D 灰
  • E~H 茶緑
  • I~ 水青

競プロって何?

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

競プロとは

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

競プロとは

例題

例題

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

 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++以外の人も安心して下さい

プログラミング言語

プログラムの実行方法

(初めての方向け)

実行方法

  • コードを出す前に、実際に動かしてみたい
  • 自分のPCで実際に動かしたかったら「環境構築」を参考にしてください
  • でも、正直面倒くさい

実行方法

  • そこで「オンライン実行環境」というのがある
  • オンライン上でコードを動かします
  • これなら、実際にコードを動かすのを気軽にできる

オンライン実行環境

などがあります

お好きなほうを選んでください

実際にやってみよう

#include <iostream>
using namespace std;
int main(){
    cout<<"Welcome KMC!"<<endl;
}

言語を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 を入れる         

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

競プロ練習会について

毎週の流れ

毎週の流れ

来週からの流れです

  • とりあえず、部室での活動が解禁になるまで配信を続けたいと思います
  • 毎週始まるまでに、配信のIDとパスワードの一覧を出しておきます

今後のスケジュール

今後のスケジュール

  • 来週からはアルゴリズムの講座も含めていきたいと思います
  • 来週も、始まると同時に並行でコンテストを行いますが、コンテスト内容は講座の内容に近いものとなります

Slack

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

Slack

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

プログラミング基礎講座

プログラミング基礎

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

プログラミング基礎

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

別スライドになります

終わり!

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

ごはん食べよう!!!