1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-10 18:48:13 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
leetcode-problemset/leetcode/originData/maximize-value-of-function-in-a-ball-passing-game.json
2023-12-09 19:57:46 +08:00

184 lines
22 KiB
JSON
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"data": {
"question": {
"questionId": "3032",
"questionFrontendId": "2836",
"boundTopicId": null,
"title": "Maximize Value of Function in a Ball Passing Game",
"titleSlug": "maximize-value-of-function-in-a-ball-passing-game",
"content": "<p>You are given a <strong>0-indexed</strong> integer array <code>receiver</code> of length <code>n</code> and an integer <code>k</code>.</p>\n\n<p>There are <code>n</code> players having a <strong>unique id</strong> in the range <code>[0, n - 1]</code> who will play a ball passing game, and <code>receiver[i]</code> is the id of the player who receives passes from the player with id <code>i</code>. Players can pass to themselves, <strong>i.e.</strong> <code>receiver[i]</code> may be equal to <code>i</code>.</p>\n\n<p>You must choose one of the <code>n</code> players as the starting player for the game, and the ball will be passed <strong>exactly</strong> <code>k</code> times starting from the chosen player.</p>\n\n<p>For a chosen starting player having id <code>x</code>, we define a function <code>f(x)</code> that denotes the <strong>sum</strong> of <code>x</code> and the <strong>ids</strong> of all players who receive the ball during the <code>k</code> passes, <strong>including repetitions</strong>. In other words, <code>f(x) = x + receiver[x] + receiver[receiver[x]] + ... + receiver<sup>(k)</sup>[x]</code>.</p>\n\n<p>Your task is to choose a starting player having id <code>x</code> that <strong>maximizes</strong> the value of <code>f(x)</code>.</p>\n\n<p>Return <em>an integer denoting the <strong>maximum</strong> value of the function.</em></p>\n\n<p><strong>Note:</strong> <code>receiver</code> may contain duplicates.</p>\n\n<p>&nbsp;</p>\n<p><strong class=\"example\">Example 1:</strong></p>\n\n<table border=\"1\" cellspacing=\"3\" style=\"border-collapse: separate; text-align: center;\">\n\t<tbody>\n\t\t<tr>\n\t\t\t<th style=\"padding: 5px; border: 1px solid black;\">Pass Number</th>\n\t\t\t<th style=\"padding: 5px; border: 1px solid black;\">Sender ID</th>\n\t\t\t<th style=\"padding: 5px; border: 1px solid black;\">Receiver ID</th>\n\t\t\t<th style=\"padding: 5px; border: 1px solid black;\">x + Receiver IDs</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">&nbsp;</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">&nbsp;</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">&nbsp;</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">2</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">1</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">2</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">1</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">3</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">2</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">1</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">0</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">3</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">3</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">0</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">2</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">5</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">4</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">2</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">1</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">6</td>\n\t\t</tr>\n\t</tbody>\n</table>\n\n<pre>\n<strong>Input:</strong> receiver = [2,0,1], k = 4\n<strong>Output:</strong> 6\n<strong>Explanation:</strong> The table above shows a simulation of the game starting with the player having id x = 2. \nFrom the table, f(2) is equal to 6. \nIt can be shown that 6 is the maximum achievable value of the function. \nHence, the output is 6. \n</pre>\n\n<p><strong class=\"example\">Example 2:</strong></p>\n\n<table border=\"1\" cellspacing=\"3\" style=\"border-collapse: separate; text-align: center;\">\n\t<tbody>\n\t\t<tr>\n\t\t\t<th style=\"padding: 5px; border: 1px solid black;\">Pass Number</th>\n\t\t\t<th style=\"padding: 5px; border: 1px solid black;\">Sender ID</th>\n\t\t\t<th style=\"padding: 5px; border: 1px solid black;\">Receiver ID</th>\n\t\t\t<th style=\"padding: 5px; border: 1px solid black;\">x + Receiver IDs</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">&nbsp;</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">&nbsp;</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">&nbsp;</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">4</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">1</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">4</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">3</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">7</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">2</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">3</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">2</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">9</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">3</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">2</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">1</td>\n\t\t\t<td style=\"padding: 5px; border: 1px solid black;\">10</td>\n\t\t</tr>\n\t</tbody>\n</table>\n\n<pre>\n<strong>Input:</strong> receiver = [1,1,1,2,3], k = 3\n<strong>Output:</strong> 10\n<strong>Explanation:</strong> The table above shows a simulation of the game starting with the player having id x = 4. \nFrom the table, f(4) is equal to 10. \nIt can be shown that 10 is the maximum achievable value of the function. \nHence, the output is 10. \n</pre>\n\n<p>&nbsp;</p>\n<p><strong>Constraints:</strong></p>\n\n<ul>\n\t<li><code>1 &lt;= receiver.length == n &lt;= 10<sup>5</sup></code></li>\n\t<li><code>0 &lt;= receiver[i] &lt;= n - 1</code></li>\n\t<li><code>1 &lt;= k &lt;= 10<sup>10</sup></code></li>\n</ul>\n",
"translatedTitle": null,
"translatedContent": null,
"isPaidOnly": false,
"difficulty": "Hard",
"likes": 203,
"dislikes": 85,
"isLiked": null,
"similarQuestions": "[{\"title\": \"Jump Game VI\", \"titleSlug\": \"jump-game-vi\", \"difficulty\": \"Medium\", \"translatedTitle\": null}]",
"exampleTestcases": "[2,0,1]\n4\n[1,1,1,2,3]\n3",
"categoryTitle": "Algorithms",
"contributors": [],
"topicTags": [
{
"name": "Array",
"slug": "array",
"translatedName": null,
"__typename": "TopicTagNode"
},
{
"name": "Dynamic Programming",
"slug": "dynamic-programming",
"translatedName": null,
"__typename": "TopicTagNode"
},
{
"name": "Bit Manipulation",
"slug": "bit-manipulation",
"translatedName": null,
"__typename": "TopicTagNode"
}
],
"companyTagStats": null,
"codeSnippets": [
{
"lang": "C++",
"langSlug": "cpp",
"code": "class Solution {\npublic:\n long long getMaxFunctionValue(vector<int>& receiver, long long k) {\n \n }\n};",
"__typename": "CodeSnippetNode"
},
{
"lang": "Java",
"langSlug": "java",
"code": "class Solution {\n public long getMaxFunctionValue(List<Integer> receiver, long k) {\n \n }\n}",
"__typename": "CodeSnippetNode"
},
{
"lang": "Python",
"langSlug": "python",
"code": "class Solution(object):\n def getMaxFunctionValue(self, receiver, k):\n \"\"\"\n :type receiver: List[int]\n :type k: int\n :rtype: int\n \"\"\"\n ",
"__typename": "CodeSnippetNode"
},
{
"lang": "Python3",
"langSlug": "python3",
"code": "class Solution:\n def getMaxFunctionValue(self, receiver: List[int], k: int) -> int:\n ",
"__typename": "CodeSnippetNode"
},
{
"lang": "C",
"langSlug": "c",
"code": "long long getMaxFunctionValue(int* receiver, int receiverSize, long long k){\n\n}",
"__typename": "CodeSnippetNode"
},
{
"lang": "C#",
"langSlug": "csharp",
"code": "public class Solution {\n public long GetMaxFunctionValue(IList<int> receiver, long k) {\n \n }\n}",
"__typename": "CodeSnippetNode"
},
{
"lang": "JavaScript",
"langSlug": "javascript",
"code": "/**\n * @param {number[]} receiver\n * @param {number} k\n * @return {number}\n */\nvar getMaxFunctionValue = function(receiver, k) {\n \n};",
"__typename": "CodeSnippetNode"
},
{
"lang": "TypeScript",
"langSlug": "typescript",
"code": "function getMaxFunctionValue(receiver: number[], k: number): number {\n\n};",
"__typename": "CodeSnippetNode"
},
{
"lang": "PHP",
"langSlug": "php",
"code": "class Solution {\n\n /**\n * @param Integer[] $receiver\n * @param Integer $k\n * @return Integer\n */\n function getMaxFunctionValue($receiver, $k) {\n \n }\n}",
"__typename": "CodeSnippetNode"
},
{
"lang": "Swift",
"langSlug": "swift",
"code": "class Solution {\n func getMaxFunctionValue(_ receiver: [Int], _ k: Int) -> Int {\n \n }\n}",
"__typename": "CodeSnippetNode"
},
{
"lang": "Kotlin",
"langSlug": "kotlin",
"code": "class Solution {\n fun getMaxFunctionValue(receiver: List<Int>, k: Long): Long {\n \n }\n}",
"__typename": "CodeSnippetNode"
},
{
"lang": "Dart",
"langSlug": "dart",
"code": "class Solution {\n int getMaxFunctionValue(List<int> receiver, int k) {\n\n }\n}",
"__typename": "CodeSnippetNode"
},
{
"lang": "Go",
"langSlug": "golang",
"code": "func getMaxFunctionValue(receiver []int, k int64) int64 {\n \n}",
"__typename": "CodeSnippetNode"
},
{
"lang": "Ruby",
"langSlug": "ruby",
"code": "# @param {Integer[]} receiver\n# @param {Integer} k\n# @return {Integer}\ndef get_max_function_value(receiver, k)\n \nend",
"__typename": "CodeSnippetNode"
},
{
"lang": "Scala",
"langSlug": "scala",
"code": "object Solution {\n def getMaxFunctionValue(receiver: List[Int], k: Long): Long = {\n \n }\n}",
"__typename": "CodeSnippetNode"
},
{
"lang": "Rust",
"langSlug": "rust",
"code": "impl Solution {\n pub fn get_max_function_value(receiver: Vec<i32>, k: i64) -> i64 {\n \n }\n}",
"__typename": "CodeSnippetNode"
},
{
"lang": "Racket",
"langSlug": "racket",
"code": "(define/contract (get-max-function-value receiver k)\n (-> (listof exact-integer?) exact-integer? exact-integer?)\n\n )",
"__typename": "CodeSnippetNode"
},
{
"lang": "Erlang",
"langSlug": "erlang",
"code": "-spec get_max_function_value(Receiver :: [integer()], K :: integer()) -> integer().\nget_max_function_value(Receiver, K) ->\n .",
"__typename": "CodeSnippetNode"
},
{
"lang": "Elixir",
"langSlug": "elixir",
"code": "defmodule Solution do\n @spec get_max_function_value(receiver :: [integer], k :: integer) :: integer\n def get_max_function_value(receiver, k) do\n\n end\nend",
"__typename": "CodeSnippetNode"
}
],
"stats": "{\"totalAccepted\": \"3.7K\", \"totalSubmission\": \"12.9K\", \"totalAcceptedRaw\": 3745, \"totalSubmissionRaw\": 12857, \"acRate\": \"29.1%\"}",
"hints": [
"<div class=\"_1l1MA\">We can solve the problem using binary lifting.</div>",
"<div class=\"_1l1MA\">For each player with id <code>x</code> and for every <code>i</code> in the range <code>[0, ceil(log<sub>2</sub>k)]</code>, we can determine the last receiver's id and compute the sum of player ids who receive the ball after <code>2<sup>i</sup></code> passes, starting from <code>x</code>.</div>",
"<div class=\"_1l1MA\">Let <code>last_receiver[x][i] =</code> the last receiver's id after <code>2<sup>i</sup></code> passes, and <code>sum[x][i] =</code> the sum of player ids who receive the ball after <code>2<sup>i</sup></code> passes. For all <code>x</code> in the range <code>[0, n - 1]</code>, <code>last_receiver[x][0] = receiver[x]</code>, and <code>sum[x][0] = receiver[x]</code>.</div>",
"<div class=\"_1l1MA\">Then for <code>i</code> in range <code>[1, ceil(log<sub>2</sub>k)]</code>, <code>last_receiver[x][i] = last_receiver[last_receiver[x][i - 1]][i - 1]</code> and <code>sum[x][i] = sum[x][i - 1] + sum[last_receiver[x][i - 1]][i - 1]</code>, for all <code>x</code> in the range <code>[0, n - 1]</code>.</div>",
"<div class=\"_1l1MA\">Starting from each player id <code>x</code>, we can now go through the powers of <code>2</code> in the binary representation of <code>k</code> and make jumps corresponding to each power, using the pre-computed values, to compute <code>f(x)</code>.</div>",
"<div class=\"_1l1MA\">The answer is the maximum <code>f(x)</code> from each player id.</div>"
],
"solution": null,
"status": null,
"sampleTestCase": "[2,0,1]\n4",
"metaData": "{\n \"name\": \"getMaxFunctionValue\",\n \"params\": [\n {\n \"name\": \"receiver\",\n \"type\": \"list<integer>\"\n },\n {\n \"type\": \"long\",\n \"name\": \"k\"\n }\n ],\n \"return\": {\n \"type\": \"long\"\n }\n}",
"judgerAvailable": true,
"judgeType": "large",
"mysqlSchemas": [],
"enableRunCode": true,
"enableTestMode": false,
"enableDebugger": true,
"envInfo": "{\"cpp\": [\"C++\", \"<p>Compiled with <code> clang 11 </code> using the latest C++ 20 standard.</p>\\r\\n\\r\\n<p>Your code is compiled with level two optimization (<code>-O2</code>). <a href=\\\"https://github.com/google/sanitizers/wiki/AddressSanitizer\\\" target=\\\"_blank\\\">AddressSanitizer</a> is also enabled to help detect out-of-bounds and use-after-free bugs.</p>\\r\\n\\r\\n<p>Most standard library headers are already included automatically for your convenience.</p>\"], \"java\": [\"Java\", \"<p><code>OpenJDK 17</code>. Java 8 features such as lambda expressions and stream API can be used. </p>\\r\\n\\r\\n<p>Most standard library headers are already included automatically for your convenience.</p>\\r\\n<p>Includes <code>Pair</code> class from https://docs.oracle.com/javase/8/javafx/api/javafx/util/Pair.html.</p>\"], \"python\": [\"Python\", \"<p><code>Python 2.7.12</code>.</p>\\r\\n\\r\\n<p>Most libraries are already imported automatically for your convenience, such as <a href=\\\"https://docs.python.org/2/library/array.html\\\" target=\\\"_blank\\\">array</a>, <a href=\\\"https://docs.python.org/2/library/bisect.html\\\" target=\\\"_blank\\\">bisect</a>, <a href=\\\"https://docs.python.org/2/library/collections.html\\\" target=\\\"_blank\\\">collections</a>. If you need more libraries, you can import it yourself.</p>\\r\\n\\r\\n<p>For Map/TreeMap data structure, you may use <a href=\\\"http://www.grantjenks.com/docs/sortedcontainers/\\\" target=\\\"_blank\\\">sortedcontainers</a> library.</p>\\r\\n\\r\\n<p>Note that Python 2.7 <a href=\\\"https://www.python.org/dev/peps/pep-0373/\\\" target=\\\"_blank\\\">will not be maintained past 2020</a>. For the latest Python, please choose Python3 instead.</p>\"], \"c\": [\"C\", \"<p>Compiled with <code>gcc 8.2</code> using the gnu11 standard.</p>\\r\\n\\r\\n<p>Your code is compiled with level one optimization (<code>-O1</code>). <a href=\\\"https://github.com/google/sanitizers/wiki/AddressSanitizer\\\" target=\\\"_blank\\\">AddressSanitizer</a> is also enabled to help detect out-of-bounds and use-after-free bugs.</p>\\r\\n\\r\\n<p>Most standard library headers are already included automatically for your convenience.</p>\\r\\n\\r\\n<p>For hash table operations, you may use <a href=\\\"https://troydhanson.github.io/uthash/\\\" target=\\\"_blank\\\">uthash</a>. \\\"uthash.h\\\" is included by default. Below are some examples:</p>\\r\\n\\r\\n<p><b>1. Adding an item to a hash.</b>\\r\\n<pre>\\r\\nstruct hash_entry {\\r\\n int id; /* we'll use this field as the key */\\r\\n char name[10];\\r\\n UT_hash_handle hh; /* makes this structure hashable */\\r\\n};\\r\\n\\r\\nstruct hash_entry *users = NULL;\\r\\n\\r\\nvoid add_user(struct hash_entry *s) {\\r\\n HASH_ADD_INT(users, id, s);\\r\\n}\\r\\n</pre>\\r\\n</p>\\r\\n\\r\\n<p><b>2. Looking up an item in a hash:</b>\\r\\n<pre>\\r\\nstruct hash_entry *find_user(int user_id) {\\r\\n struct hash_entry *s;\\r\\n HASH_FIND_INT(users, &user_id, s);\\r\\n return s;\\r\\n}\\r\\n</pre>\\r\\n</p>\\r\\n\\r\\n<p><b>3. Deleting an item in a hash:</b>\\r\\n<pre>\\r\\nvoid delete_user(struct hash_entry *user) {\\r\\n HASH_DEL(users, user); \\r\\n}\\r\\n</pre>\\r\\n</p>\"], \"csharp\": [\"C#\", \"<p><a href=\\\"https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10\\\" target=\\\"_blank\\\">C# 10 with .NET 6 runtime</a></p>\"], \"javascript\": [\"JavaScript\", \"<p><code>Node.js 16.13.2</code>.</p>\\r\\n\\r\\n<p>Your code is run with <code>--harmony</code> flag, enabling <a href=\\\"http://node.green/\\\" target=\\\"_blank\\\">new ES6 features</a>.</p>\\r\\n\\r\\n<p><a href=\\\"https://lodash.com\\\" target=\\\"_blank\\\">lodash.js</a> library is included by default.</p>\\r\\n\\r\\n<p>For Priority Queue / Queue data structures, you may use 5.3.0 version of <a href=\\\"https://github.com/datastructures-js/priority-queue/tree/fb4fdb984834421279aeb081df7af624d17c2a03\\\" target=\\\"_blank\\\">datastructures-js/priority-queue</a> and 4.2.1 version of <a href=\\\"https://github.com/datastructures-js/queue/tree/e63563025a5a805aa16928cb53bcd517bfea9230\\\" target=\\\"_blank\\\">datastructures-js/queue</a>.</p>\"], \"ruby\": [\"Ruby\", \"<p><code>Ruby 3.1</code></p>\\r\\n\\r\\n<p>Some common data structure implementations are provided in the Algorithms module: https://www.rubydoc.info/github/kanwei/algorithms/Algorithms</p>\"], \"swift\": [\"Swift\", \"<p><code>Swift 5.5.2</code>.</p>\"], \"golang\": [\"Go\", \"<p><code>Go 1.21</code></p>\\r\\n<p>Support <a href=\\\"https://github.com/emirpasic/gods/tree/v1.18.1\\\" target=\\\"_blank\\\">https://godoc.org/github.com/emirpasic/gods@v1.18.1</a> library.</p>\"], \"python3\": [\"Python3\", \"<p><code>Python 3.10</code>.</p>\\r\\n\\r\\n<p>Most libraries are already imported automatically for your convenience, such as <a href=\\\"https://docs.python.org/3/library/array.html\\\" target=\\\"_blank\\\">array</a>, <a href=\\\"https://docs.python.org/3/library/bisect.html\\\" target=\\\"_blank\\\">bisect</a>, <a href=\\\"https://docs.python.org/3/library/collections.html\\\" target=\\\"_blank\\\">collections</a>. If you need more libraries, you can import it yourself.</p>\\r\\n\\r\\n<p>For Map/TreeMap data structure, you may use <a href=\\\"http://www.grantjenks.com/docs/sortedcontainers/\\\" target=\\\"_blank\\\">sortedcontainers</a> library.</p>\"], \"scala\": [\"Scala\", \"<p><code>Scala 2.13.7</code>.</p>\"], \"kotlin\": [\"Kotlin\", \"<p><code>Kotlin 1.9.0</code>.</p>\"], \"rust\": [\"Rust\", \"<p><code>Rust 1.58.1</code></p>\\r\\n\\r\\n<p>Supports <a href=\\\"https://crates.io/crates/rand\\\" target=\\\"_blank\\\">rand </a> v0.6\\u00a0from crates.io</p>\"], \"php\": [\"PHP\", \"<p><code>PHP 8.1</code>.</p>\\r\\n<p>With bcmath module</p>\"], \"typescript\": [\"Typescript\", \"<p><code>TypeScript 5.1.6, Node.js 16.13.2</code>.</p>\\r\\n\\r\\n<p>Your code is run with <code>--harmony</code> flag, enabling <a href=\\\"http://node.green/\\\" target=\\\"_blank\\\">new ES2022 features</a>.</p>\\r\\n\\r\\n<p><a href=\\\"https://lodash.com\\\" target=\\\"_blank\\\">lodash.js</a> library is included by default.</p>\"], \"racket\": [\"Racket\", \"<p>Run with <code>Racket 8.3</code>.</p>\"], \"erlang\": [\"Erlang\", \"Erlang/OTP 25.0\"], \"elixir\": [\"Elixir\", \"Elixir 1.13.4 with Erlang/OTP 25.0\"], \"dart\": [\"Dart\", \"<p>Dart 2.17.3</p>\\r\\n\\r\\n<p>Your code will be run directly without compiling</p>\"]}",
"libraryUrl": null,
"adminUrl": null,
"challengeQuestion": null,
"__typename": "QuestionNode"
}
}
}