現在有 N 個格子,由左至右值分別為 x0, x1, x2, …, xN-1
每個格子上都有一個數字,代表其傳送點編號;
當你踏進格子 i 時,將會觸發其傳送點,並被傳送至編號 xi 的格子中;
之後繼續觸發下個傳送點,依序往復。
傳送點在發揮過一次效力後就會被破壞,
也就是傳送的過程,會在被傳送到「曾經走過」的格子時停止。
現在已知某些格子上放有好吃的布朗尼,
熱愛甜點的你,當然希望能夠吃到越多越多。
給定由編號 T 的格子出發,經過傳送點的傳送,請問最多可以吃到幾個布朗尼?
第一行有兩個正整數 N 和 T
代表總共有 N 個格子 ( 1 ≤ N ≤ 1000 ),並且將從編號 T ( 0 ≤ T ≤ N-1 ) 的格子開始
第二行由左至右有 N 個正整數 xi ( 0 ≤ xi ≤ N-1 )
兩兩之間以空格隔開,代表傳送點資訊
第三行由左至右有 N 個正整數 yi ( yi = 0 或 1 )
兩兩之間以空格隔開,代表該格有 (yi = 1) 或 沒有 (yi = 0) 布朗尼
最多可以吃到幾個布朗尼?
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N = 0, T = 0, tmp = 0, total = 0;
vector<int> v_tp, v_Brownie;
cin >> N >> T;
for (int i = 0; i < N; i++) {
cin >> tmp;
v_tp.push_back(tmp);
}
for (int i = 0; i < N; i++) {
cin >> tmp;
v_Brownie.push_back(tmp);
}
while (v_tp[T] != -1) {
if (v_Brownie[T] == 1) {
total++;
}
tmp = v_tp[T];
v_tp[T] = -1;
T = tmp;
}
cout << total << endl;
return 0;
}
APCS
C++