とりあえず、グラフにする。
あるトーストを学ぶために食べるトーストの枚数は最小で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 件のコメント :
コメントを投稿