ALDS1_4_A Search - Linear Search
# 目次
# 問題
# 解答
ファイル先頭部分はこのサイトで使用しているテンプレートを参照のこと.
inline bool search(vector<ll> v, ll target) {
for (ll j = 0; j < v.size(); j++) {
if (target == v[j]) {
return true;
}
}
return false;
}
int main(void) {
ll n, q, s, t;
cin >> n;
vector<ll> vs;
vector<ll> vt;
for (ll i = 0; i < n; i++) {
cin >> s;
vs.push_back(s);
}
cin >> q;
for (ll i = 0; i < q; i++) {
cin >> t;
vt.push_back(t);
}
ll count = 0;
for (ll i = 0; i < q; i++) {
if (search(vs, vt[i])) count++;
}
cout << count << endl;
}
# 解答
上記の例のsearch関数の中でif文の終了判定とtargetとの同一判定の2つの比較を、1つに減らすことができる.
番兵というテクニックを使う.
変更点はsearch関数内のみ.
inline bool search(vector<ll> v, ll target) {
if (v[v.size() - 1] == target) return true;
ll stash = v[v.size() - 1];
v[v.size() - 1] = target;
ll i = 0;
while (v[i] != target) i++;
v[v.size() - 1] = stash;
return i != v.size() - 1;
}