町が N 個ある。町 i から町 Ai に移動することを K 回繰り返す。
町 1 から始めた時、最終的にどの町にたどり着くか?
という問題の解答コードで
int s = find(path.begin(), path.end(), now) - path.begin();
int r = (int)path.size() - s;
この2文の - の記号はどういう役割をしているのか知りたいです。
またイテレータというのも完全に理解していないため、少し詳しく説明してくれるとありがたいです。
解説をどうかお願いします。
全体↓
c++
1#include <iostream> 2#include <set> 3#include <vector> 4using namespace std; 5 6using ll = long long; 7 8int main() { 9 ll N, K; 10 cin >> N >> K; 11 vector<int> A(N); 12 for (int i = 0; i < N; i++) { 13 cin >> A.at(i); 14 A[i]--; // 0-indexed に変更 15 } 16 17 set<int> used; // 探索済みの町を保存 18 vector<int> path; // 探索の順番を格納 19 int now = 0; 20 while (used.count(now) == 0) { // 探索済みの町に到達するまで 21 path.push_back(now); 22 used.insert(now); 23 now = A[now]; 24 } 25 int s = find(path.begin(), path.end(), now) - path.begin(); // s: ループする最初の部分に到達するまで 26 int r = (int)path.size() - s; // 周期 27 28 if (K < s) { // ループ部分に到達しない時 29 cout << path[K] + 1 << endl; 30 return 0; 31 } 32 else { // ループ部分に到達する時 33 cout << path[(K - s) % r + s] + 1 << endl; 34 return 0; 35 } 36}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/10/23 10:26