けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 277 A - ^{-1} (8Q, 灰色, 100 点)

線形探索法の基本問題!

問題概要

 1, 2, \dots, N を並び替えてできる順列  P_{1}, P_{2}, \dots, P_{N} が与えられる。

整数  X が与えられるので、 P_{i} = X を満たす  i を求めよ。

考えたこと

まず順列  P は、サイズ  Nvector<int> 型の変数 P として受け取ろう(C++)。このとき、 P_{1}, P_{2}, \dots, P_{N} はそれぞれ P[0], P[1], ..., P[N-1] となることに注意しよう。配列は通常 0 始まりなので、添字がずれるのだ。

そして、for 文を用いて、

P[i] = X

となるような i を見つけて、その値を他の変数(たとえば res)に保存しておこう。

最後に、res + 1 の値を答えればよい(1 を足すのは 0 始まりである部分を補正するため)。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N, X;
    cin >> N >> X;
    vector<int> P(N);
    for (int i = 0; i < N; ++i) cin >> P[i];

    int res;
    for (int i = 0; i < N; ++i) {
        if (P[i] == X) res = i;
    }
    cout << res + 1 << endl;
}