0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

c++未習者が2時間で情報オリンピック一次予選を通過できるようになる記事<Part1>

Posted at

※この記事は練習含め約40分で読み終えることを想定しています

この講座はPart1からPart3までに分かれています。

はじめに

初めまして!中学生競技プログラマーのFです!
競技プログラミング、情報オリンピックと聞いて、「難しい」という印象を持たれる方は大変多くおられるように思います。しかし、実際のハードルはかなり低く、もちろん人間やめないと解けないレベルの問題もありますが、簡単な問題も用意されており、そういった問題は、基本的なプログラムを理解していると解けます!そこで、

「プログラミングに興味がある!」
「なんか暇だから暇つぶし欲しい!」
「趣味を見つけて垢抜けたい!」

という方に向けて、有名なプログラミングコンテストの中で最も簡単な(筆者調べ)、「情報オリンピック一次予選」を突破できるようになるための記事を書きました。

※この記事は、あくまで「情報オリンピック一次予選の対策」ですので、有識者の方からしますと、教える場所に問題があると思われるかもしれませんが、情報オリンピックの一次予選では、汎用性の塊である基本的なプログラムしか出ないので、おそらく問題ないという考えのもと書いております。ご了承ください。

※二次予選以降はレベルが跳ね上がるので、サポート対象外です。他の記事から学習することをお勧めします。

目次

  • 情報オリンピックとは?
  • Atcoderに登録しよう!
  • 環境構築
  • c++の基本形
  • 出力
  • 変数
  • 配列
  • プログラミングの五則計算
  • 入力
  • 練習問題

内容一覧

情報オリンピックとは? 日本情報オリンピックは、高校生までの競技プログラマー日本一を決める大会です。代表に選ばれると、世界大会にいけます。 詳しくは下のサイトを見てください。 ※JOI2024 / 2025のものです

https://www.ioi-jp.org/joi-2025

とにかくここで知っておかなければならないこと(一部一次予選のみにピックアップ)は
・Atcoderというサイトを使って行う
・一次予選は3回実施される
・一次予選では基本的なプログラムが出題される
・一次予選は80分で、4問中3問解ければ突破
ということです。

「基本的なプログラム」に関しては、次のことができれば問題ありません。
今のうちは意味わからなくても構いません。むしろそれが普通です。
・入力・出力
・プログラミングの五則計算
・if文を用いた条件判定の実装
・配列の概念の理解と実装
・for文を用いた全探索の実装

Atcoderに登録しよう! Atcoderでは、情報オリンピックの過去問が、本番の問題形式で解けます。また、自動採点機能もついているので、ぜひ登録しましょう!

https://atcoder.jp/?lang=ja

・Atcoderにアクセスし、右上の「新規登録」を押します。
・少なくとも必須事項を入力し、新規登録します。

これで登録できました!Atcoderでは、毎週土日21時(日曜はない日もある)から、プログラミングコンテストが開催されているので、「土曜日の方のみ」参加してみることをお勧めします。 (日曜の方に出ると、難しすぎてメンタルが壊れます)

環境構築 学校の配布パソコンなどでもできるよう、今回はpaiza.IOを使います。下のサイトにアクセスしたら環境構築終わり!一応、言語がC++になっているか確認してください。

https://paiza.io/ja/projects/new?language=cpp

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分)

お疲れ様です。この記事は終了しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?