zuka
ついに競技プログラミングを始めました!
本記事は,管理人の競技プロ精進日記としてログを取ったものです。モチベーションを爆上げするために積極的に,アウトプットしていく作戦です。これから競技プログラミングを始めようと考えている人や,なんとなく敷居が高いと感じている人の参考になれば嬉しく思います。その他の記事は以下をご覧ください。
目次
本記事の概要
Atcoderが公表しているc++の入門記事の内容を1からさらっていくものです。今回は2.02.多重ループです。
実装
#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;
int main() {
int N, S;
int ans = 0;
cin >> N >> S;
vector<int> A(N), P(N);
rep(i, N){
cin >> A[i];
}
rep(i, N){
cin >> P[i];
}
// for文を2つ重ねる
rep(i, N){
rep(j, N){
if (A[i] + P[j] == S){
ans ++;
}
}
}
cout << ans << endl;
}
ポイント
今回おさえるべき内容
for
文の中にfor
文を入れることができる
外側のループを抜けたい場合にはフラグを用意する
各ループで使われている変数i
やj
を間違えないように
for
文の中にfor
文を入れることで多重に繰り返しを行うことができます。1つのループであればbreak
を使えば抜け出せたのですが,2つ以上のループでbreak
を使ってしまうと,本来意図しない位置でfor
ループを抜け出してしまいます。
そこで,あらかじめflag
変数を用意しておいて,flag
がtrue
になればfor
ループを抜け出すというような処理を行うことが一般的です。
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
bool flag = false;
rep(i, N){
rep(j, M){
行いたい処理
flagがtrueになるか判断してtrueならばflagにtrueを代入
}
// もしflagがtrueならば外側のループを抜け出す
// ここで闇雲にbreakだけを記述してしまうと外側のループは最初で抜け出してしまう
if (flag==true) break;
}
コメント