※この記事は練習含め約40分で読み終えることを想定しています
この講座はPart1からPart3までに分かれています。
はじめに
初めまして!中学生競技プログラマーのFです!
競技プログラミング、情報オリンピックと聞いて、「難しい」という印象を持たれる方は大変多くおられるように思います。しかし、実際のハードルはかなり低く、もちろん人間やめないと解けないレベルの問題もありますが、簡単な問題も用意されており、そういった問題は、基本的なプログラムを理解していると解けます!そこで、
「プログラミングに興味がある!」
「なんか暇だから暇つぶし欲しい!」
「趣味を見つけて垢抜けたい!」
という方に向けて、有名なプログラミングコンテストの中で最も簡単な(筆者調べ)、「情報オリンピック一次予選」を突破できるようになるための記事を書きました。
※この記事は、あくまで「情報オリンピック一次予選の対策」ですので、有識者の方からしますと、教える場所に問題があると思われるかもしれませんが、情報オリンピックの一次予選では、汎用性の塊である基本的なプログラムしか出ないので、おそらく問題ないという考えのもと書いております。ご了承ください。
※二次予選以降はレベルが跳ね上がるので、サポート対象外です。他の記事から学習することをお勧めします。
目次
- 情報オリンピックとは?
- Atcoderに登録しよう!
- 環境構築
- c++の基本形
- 出力
- 変数
- 配列
- プログラミングの五則計算
- 入力
- 練習問題
内容一覧
情報オリンピックとは?
日本情報オリンピックは、高校生までの競技プログラマー日本一を決める大会です。代表に選ばれると、世界大会にいけます。 詳しくは下のサイトを見てください。 ※JOI2024 / 2025のものですhttps://www.ioi-jp.org/joi-2025
とにかくここで知っておかなければならないこと(一部一次予選のみにピックアップ)は
・Atcoderというサイトを使って行う
・一次予選は3回実施される
・一次予選では基本的なプログラムが出題される
・一次予選は80分で、4問中3問解ければ突破
ということです。
「基本的なプログラム」に関しては、次のことができれば問題ありません。
今のうちは意味わからなくても構いません。むしろそれが普通です。
・入力・出力
・プログラミングの五則計算
・if文を用いた条件判定の実装
・配列の概念の理解と実装
・for文を用いた全探索の実装
Atcoderに登録しよう!
Atcoderでは、情報オリンピックの過去問が、本番の問題形式で解けます。また、自動採点機能もついているので、ぜひ登録しましょう!・Atcoderにアクセスし、右上の「新規登録」を押します。
・少なくとも必須事項を入力し、新規登録します。
これで登録できました!Atcoderでは、毎週土日21時(日曜はない日もある)から、プログラミングコンテストが開催されているので、「土曜日の方のみ」参加してみることをお勧めします。 (日曜の方に出ると、難しすぎてメンタルが壊れます)
環境構築
学校の配布パソコンなどでもできるよう、今回はpaiza.IOを使います。下のサイトにアクセスしたら環境構築終わり!一応、言語がC++になっているか確認してください。c++の基本形
いよいよ本題に入ります。 paiza.IOを開くと、次のようなものがありますよね。#include <iostream>
using namespace std;
int main(void){
// Your code here!
}
これについては、理解しなくてもいいです。詳しいことが知りたい場合は、下のサイトを見てください。
https://atcoder.jp/contests/APG4b/tasks/APG4b_b
では、コイツを全消去して、以下のように書き換えてください。できれば毎回。
テンプレとして、メモアプリなどにコピペしておいてもいいかもしれません。
※Visual Studioでは、bits/stdc++.h が対応していません。
#include <bits/stdc++.h>
using namespace std;
int main() {
}
これがc++の基本形です。int main()の{ }の中にコードを書いていきます。
出力
c++で何かを出力する方法を紹介します。下のコードをコピーして貼り付けてください。#include <bits/stdc++.h>
using namespace std;
int main() {
cout << 100 << endl;
cout << 114 << 514 << endl;
cout << "Hello" << endl;
cout << endl;
cout << "HelloWorld" << endl;
cout << "Hello" << "World" << endl;
}
解説
・cout << (入力したいもの); で入力できる!
coutは、「しーあうと」と読む
・文字を出力するときは " " (ダブルクオーテーション)をつける!
・endl は改行を表す!
・数字を出力するときはそのまま!
・cout << (入力したいもの) << (入力したいもの); で、つなげて入力できる!(個数制限なし)
※基本的に競技プログラミングの問題で何かを出力するときは、末尾にendlがいります。
; (セミコロン)について解説します。これは、c++をやる上で、絶対いります。基本的に文の終わりに着けます。
int main(){
}
のような、範囲指定するカッコがある場合は基本いりません。
※まあ習うより慣れろって感じですねここは
変数
変数とは、データを記憶しておく場所。いわば、データの保管箱です。また、箱に形があるように、変数にも型があります。覚えておかなければいけないものを4つ挙げます。型 | 格納対象 |
---|---|
int | 整数 |
double | 小数 |
string | 文字列 |
char | 文字 |
(補足)
・char型の集合体がstring型っていう感じの解釈でいいです。
・変数に格納対象外の情報をぶち込むのは絶対にやめましょう。そこはちゃんと確認してください。
<禁断奥義>auto型
autoという型で定義される変数は、勝手に型名を決めてくれます!
ただ、型名を途中で変えることはできないので、最初にstring型の情報を格納してから、int型に更新するなどはできないので、注意してください。個人的には型名をちゃんと分けるのを推奨します。
以下のコードをコピペしてください
#include <bits/stdc++.h>
using namespace std;
int main() {
int A = 1;
double B = 2.0;
string S = "Hello";
cout << A << endl;
cout << B << endl;
cout << S << endl;
S = "World";
cout << S << endl;
}
実行すると、変数で定義した情報が表示されましたね!
ここから、以下のことが分かります。
・coutで変数を出力することができる。
・変数の値を更新できる( (変数名) = (入力したいデータ) で更新)
ちなみに、文字列や文字を表すのに " " や ' ' を使うのは、文字列と変数の違いを明らかにするためです。
配列
配列とは、変数の集合体です。箱が横に並んでいるようなイメージです。以下のプログラムをコピペしてください。#include <bits/stdc++.h>
using namespace std;
int main() {
int A[4];
A[0] = 1;
A[1] = 2;
A[2] = 3;
cout << A[0] << endl;
cout << A[1] << endl;
cout << A[2] << endl;
cout << A[3] << endl;
}
解説
入力したデータと0が表示されましたね!
以下のことが分かります。
・配列は、なんかよくわからん番号が振られてるだけで、別に変数と同じ
・値が未定義の場合は0が表示される(int型では)
このよくわからん番号は、配列の番号です。0番目から、0,1,2,3・・・(番目)と数えます。ただの変数によくわからん番号を付ける理由は、Part2の方で学習します。ですので、今は「こんなのがある」程度の解釈で構いません。
プログラミングの五則計算
四則演算やん。馬鹿じゃね?と思われるかもしれませんが、プログラミングでは、四則演算に加えて、割り算の余りを求める、'%' がよく使われます。ですので、私は五則演算と呼んでいます。以下のコードをコピペしてください。#include <bits/stdc++.h>
using namespace std;
int main() {
int A[3];
A[0] = 1;
A[1] = 2;
A[2] = 3;
int B = 3 / 2; //割り切れないものをintに代入
cout << A[0] + A[1] << endl; //足し算
cout << A[0] - A[1] << endl; //引き算
cout << A[0] * A[1] << endl; //掛け算
cout << A[1] / A[0] << endl; //割り算(割り切れる)
cout << A[2] % A[1] << endl; //余りの計算
cout << B << endl;
}
解説
以下のことが分かります。
・'+' で足し算ができる。
・'-' で引き算ができる。
・'*' で掛け算ができる。
・'/' で割り算ができる。
・'%' で余りの計算ができる。
・計算を変数に代入できる。
・割り切れない計算をint型に格納したとき、商は切り捨てられる。
ちなみに、数字と変数を組み合わせることもできるし、カッコ( )も数学と同じように使えます。
入力
入力のやり方は、以下の2ステップです。
1.適切な型の変数を用意する。
2.cin >> (変数);で入力する。
※cin >> (変数) >> (変数); (>>は何個つなげてもOK!)
で同時に入力できるが、スペースキーまたはエンターで情報を分ける必要がある。
(例)cin >> A >> B; の入力は、10 30 みたいな感じで半角スペースいる。
練習問題
もうこの時点で、一部の情オリ予選問題は解けます!過去問を扱っていきましょう!
JOI 2024/2025 一次予選 (第1回) 過去問 (3分)
JOI 2023/2024 一次予選 (第3回) 過去問 (3分)
JOI 2023/2024 一次予選 (第2回) 過去問 (3分)
お疲れ様です。この記事は終了しました。