とりあえず、グラフにする。
あるトーストを学ぶために食べるトーストの枚数は最小で1、最大でルートまでの距離
全ての頂点に関して試す。
点数も1000より低いし、本番でも40人以上が通してるけど、そんなに簡単とは思えなかった。
class PrinceXToastbook { public: double eat(vector <int> P) { const int N = P.size(); bool vis[N]; vector<double> v[N]; for (int i = 0, j; i < N; ++i) { fill(vis, vis + N, false); double depth = 1; for (j = i; P[j] != -1; j = P[j]) { if (vis[j]) { depth = 0; break; } ++depth; vis[j] = true; } if (depth) v[j].push_back(depth); } double ret = 0; for (int i = 0; i < N; ++i) { if (v[i].empty()) continue; for (int j = 0; j < v[i].size(); ++j) { double n = 1.0; for (int k = 1; k <= v[i][j]; ++k) { n /= k; } ret += n; } } return ret; } };
0 件のコメント :
コメントを投稿