📜  导演专访 |第 13 组

📅  最后修改于: 2022-05-13 01:58:15.185000             🧑  作者: Mango

导演专访 |第 13 组

在 CodeChef 上进行了 3 小时的编码轮次。您不能在他们的 IDE 中使用自定义测试用例,也不能在运行后编辑您的代码。

编码问题 1
Amanada,一个小学生,正在学习英文字母。她的老师设计了一个小游戏来让这项任务变得有趣。 'm' 行和 'n' 列的网格用英文字母填充。她需要通过在任何相邻的网格单元中一次移动一个步骤来搜索该网格中的英语单词。给出了一个字母网格和一组英文单词。 Amanda 可以从网格中的任何位置开始,并且可以在 8 个相邻网格单元中的任何一个中移动,一次一步。每个网格单元只能使用一次。

输入:给你一个模板,你需要在其中实现一个函数,其签名如下。

C 
/* return 0 for false, 1 for true. */ 
int findWordInAGrid(char grid[128][128], int m, int n, char word[32]) 

C++ 
bool findWordInAGrid(char grid[128][128], int m, int n, char word[32]) 

Java 
static boolean findWordInAGrid(char[][] grid, int m, int n, String word) 
  • grid[][] 表示给定网格中的字符。只有前 m 行和前 n 列应该被认为是相关的。 word 是必须在网格中找到其出现的单词。
  • 请记住,单词可以从网格中的任何位置开始。 word 永远不会包含超过 30 个字符。如果在网格中找到单词,则返回 true,否则返回 false。

输出:如果您可以在网格中找到单词,则该函数应返回 true,否则返回 false。示例让我们考虑下面给出的网格: abcdefghi 并且要搜索的单词集是: abc abedhi efgh

上面例子的输出应该是: abc: true abedhi: true efgh: false Constraints 1 ?米,n? 100

编码问题2:解决此问题您将获得2分

给你一棵有根的树。树不一定是二元的。这棵树包含 N 个节点,标记为 1 到 N。给定树的形式为大小为 N 的数组 P[1..N]。P[i] 表示标记为 i 的节点的父节点的标签。为清楚起见,您可以假设树满足以下条件。

  • 树的根被标记为 1。因此 P[1] 设置为 0。节点 T 的父节点的标签将始终小于 T。因此 P[i] < i 将始终为真。所有节点都包含一个可变值(或更简单地说,一个变量),最初设置为 0。
  • 您被要求执行以下类型的几个操作 ADD XY:将 Y 添加到节点 X 的值。 ADDUP XY:将 Y 添加到节点 X 的值。然后,将 Y 添加到 P[X] 的值(即X 的父母)。将 Y 添加到 P[P[X]] 处的值(即 P[X] 的父级).. 等等,直到将 Y 添加到根处的值。
  • 完成所有给定操作后,系统会要求您回答以下类型的几个查询 VAL X:打印节点 X 处的值。 VALTREE X:打印以 X 为根的子树中所有节点的值总和(包括 X )。
  • 输入 - 输入的第一行包含数字 T,即测试用例的数量。然后是T测试用例的描述。每个测试用例的第一行分别包含数字 N、M 和 Q(由单个空格字符分隔)。 N 描述了节点的数量。 M 描述了您必须执行的操作数。 Q 描述了您必须回答的查询数量。接下来的 N 行每行包含一个数字,表示数组 P[1..N]。当然,第一行的数字始终为 0。接下来的 M 行包含相应操作的描述。操作将是“ADD X Y”或“ADDUP X Y”(不带引号)。
  • 请参阅问题陈述和示例 I/O 说明以清楚了解操作的含义。在操作之后,接下来的 Q 行包含查询的描述。查询将是“VAL X”或“VALTREE X”(不带引号)。请参阅问题陈述和示例 I/O 说明以清楚了解查询的含义。输出将每个查询的结果单独打印在一行上。由于某些查询的答案可能太大,请以 1,000,000,007 为模打印结果。不要在测试用例之间打印任何空行。约束 1 ? ? 10 1 ? N ? 50000 1 ?米? 50000 1 ?问? 50000 1 ? X ? N 1 ?是吗? 50000 输入文件将小于 2 MB。

采样输入2 5 5 3 0 1 1 1 3 ADD 1 10 ADD 2 20 ADD 3 30 ADD 4 40 ADDUP 5 50 VAL 3 VALTREE 3 VALTREE 1 7 4 5 0 1 2 2 2 1 2 ADD 6 76 ADDUP 1 49 ADD 4 48 ADDUP 2 59 VALTREE 1 VALTREE 5 VAL 5 VAL 5 VALTREE 2 VAL 2

示例输出80 130 250 291 0 0 107 59 说明 第一个示例中,在应用程序操作结束时,每个节点的值如下 1:60 2:20 3:80 4:40 5:50此外,以每个节点为根的子树中所有节点的值之和如下 1:250 2:20 3:130 4:40 5:50

编码问题 3:解决此问题您将获得 1 分

在二叉树中,两个叶子节点之间的直径和定义为从一个叶子到另一个叶子时唯一路径中所有节点的总和。假设这棵树是一棵完全二叉树,并且每个叶子节点距树根的深度相同。求二叉树中最大直径和的值。请注意,最大直径也可以是单个叶节点(因为单个叶节点也是有效直径,所以从叶节点到其自身的长度为 0 的平凡路径)。

输入:输入的第一行是数字T,表示测试用例的数量。每个案例的输入由 2 行组成。第一行由树中的节点数 N 组成。下面一行由数字 A[1..n] 组成,表示树中每个节点的值。输入中的第一个元素是树的根元素。考虑以下问题中根元素的索引为 1,输入中第 i 个元素的左孩子是第 (2*i) 个元素,第 i 个元素的右孩子是第 (2*i+1) 个元素。

输出:输出由 T 行组成,表示每个测试用例的二叉树中最大直径总和的值。解决方案模板 在提供的解决方案模板中,完成签名为 C/C++ int 函数 (int nodes, int tree[511]) Java static int maxDiameterSum(int nodes, int[] tree) maxDiameterSum 的第一个参数是数字树中的节点数。第二个参数是树,以数组格式呈现,如上面输入部分所述。 maxDiameterSum 应该返回二叉树中最大直径和的值。注意:您可以随意编辑代码。添加/删除标题。添加/删除方法。依此类推..只要您的最终代码如上所述解决了输入和输出的问题。

您可以提交自己的代码,而无需使用模板。约束 T ? 100 牛? 511 节点值的范围在 100000 和 100000 之间 N 的形式为 2 k 1,其中 k 是树的高度。样本输入 1 7 2 4 5 8 4 3 6

Directi的所有练习题!