任务类型 | 任务内容 |
---|---|
任务一 | InternThinker 挑战 Leetcode |
任务二 | 考倒 InternThinker |
任务三 | 吐槽 OR 夸夸 (可选) |
任务一
序号 | Leetcode题目链接 | Prompt | InternThinker 回答截图 | Leetcode 提交结果 | 评论 |
---|---|---|---|---|---|
1 | 1812. 判断国际象棋棋盘中一个格子的颜色 - 力扣(LeetCode) | 1812. 判断国际象棋棋盘中一个格子的颜色 给你一个坐标 coordinates ,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。 如果所给格子的颜色是白色,请你返回 true,如果是黑色,请返回 false 。 给定坐标一定代表国际象棋棋盘上一个存在的格子。坐标第一个字符是字母,第二个字符是数字。 输入:coordinates = "a1" 输入:coordinates = "h3" 输入:coordinates = "c7" 提示: 以上是一道在线代码测试题,请按照以下格式输出答案:
| ![]() | ![]() | 简单 |
2 | 935. 骑士拨号器 - 力扣(LeetCode) | 935. 骑士拨号器 象棋骑士可能的移动方式如下图所示: 我们有一个象棋骑士和一个电话垫,如下所示,骑士只能站在一个数字单元格上(即蓝色单元格)。 给定一个整数 n,返回我们可以拨多少个长度为 n 的不同电话号码。 你可以将骑士放置在任何数字单元格上,然后你应该执行 n - 1 次移动来获得长度为 n 的号码。所有的跳跃应该是有效的骑士跳跃。 因为答案可能很大,所以输出答案模 109 + 7. 示例 1: 输入:n = 1 输入:n = 2 输入:n = 3131 1 <= n <= 5000 以上是一道在线代码测试题,请按照以下格式输出答案: class Solution: | ![]() | ![]() | 中等 |
3 | 2717. 半有序排列 - 力扣(LeetCode) | 2717. 半有序排列 示例 1: 提示:
| ![]() | ![]() | 简单 |
4 | 3264. K 次乘运算后的最终数组 I - 力扣(LeetCode) | 3264. K 次乘运算后的最终数组 I 以上是一道在线代码测试题,请按照以下格式输出答案: class Solution: def getFinalState(self, nums: List[int], k: int, multiplier: int) -> List[int]: | ![]() | ![]() | 简单 |
5 | 908. 最小差值 I - 力扣(LeetCode) | 908. 最小差值 I 以上是一道在线代码测试题,请按照以下格式输出答案: class Solution: | ![]() | ![]() | 简单 |
任务二
序号 | Prompt | InternThinker 回答截图 | 题目正确答案 | InternThinker 回答是否正确 (请找出错误的例子) | 您是否对参考答案有把握 | 题目来源 (如有请贴链接) | 评论 |
---|---|---|---|---|---|---|---|
1 | 一个农夫带着一只狼,一只羊和一颗白菜过河,河边有一条船,农夫一次可以携带三个对象过河。但是,如无人看管,狼要吃羊,羊要吃菜。问农夫如何安排过河,才能使狼、羊、白菜都安全过河。 | ![]() | 第一次过河:狼、羊、白菜,所有物品都安全到达对岸,没有任何损失! | 否 | 是 | ||
2 | 2931. 购买物品的最大开销 以上是一道在线代码测试题,请按照以下格式输出答案: class Solution: | ![]() | class Solution: def maxSpending(self, values: List[List[int]]) -> int: m, n = len(values), len(values[0]) q = [(values[i][-1], i, n - 1) for i in range(m)] heapify(q) ans = 0 for turn in range(1, m * n + 1): val, i, j = heappop(q) ans += val * turn if j > 0: heappush(q, (values[i][j - 1], i, j - 1)) return ans | ![]() | 是 | 2931. 购买物品的最大开销 - 力扣(LeetCode) | 困难 |
3 | 2959. 关闭分部的可行集合数目 一个公司在全国有 n 个分部,它们之间有的有道路连接。一开始,所有分部通过这些道路两两之间互相可以到达。 公司意识到在分部之间旅行花费了太多时间,所以它们决定关闭一些分部(也可能不关闭任何分部),同时保证剩下的分部之间两两互相可以到达且最远距离不超过 maxDistance 。 两个分部之间的 距离 是通过道路长度之和的 最小值 。 给你整数 n ,maxDistance 和下标从 0 开始的二维整数数组 roads ,其中 roads[i] = [ui, vi, wi] 表示一条从 ui 到 vi 长度为 wi的 无向 道路。 请你返回关闭分部的可行方案数目,满足每个方案里剩余分部之间的最远距离不超过 maxDistance。 注意,关闭一个分部后,与之相连的所有道路不可通行。 注意,两个分部之间可能会有多条道路。 示例 1: 输入:n = 3, maxDistance = 5, roads = [[0,1,2],[1,2,10],[0,2,10]] 输出:5 解释:可行的关闭分部方案有: - 关闭分部集合 [2] ,剩余分部为 [0,1] ,它们之间的距离为 2 。 - 关闭分部集合 [0,1] ,剩余分部为 [2] 。 - 关闭分部集合 [1,2] ,剩余分部为 [0] 。 - 关闭分部集合 [0,2] ,剩余分部为 [1] 。 - 关闭分部集合 [0,1,2] ,关闭后没有剩余分部。 总共有 5 种可行的关闭方案。 示例 2: 输入:n = 3, maxDistance = 5, roads = [[0,1,20],[0,1,10],[1,2,2],[0,2,2]] 输出:7 解释:可行的关闭分部方案有: - 关闭分部集合 [] ,剩余分部为 [0,1,2] ,它们之间的最远距离为 4 。 - 关闭分部集合 [0] ,剩余分部为 [1,2] ,它们之间的距离为 2 。 - 关闭分部集合 [1] ,剩余分部为 [0,2] ,它们之间的距离为 2 。 - 关闭分部集合 [0,1] ,剩余分部为 [2] 。 - 关闭分部集合 [1,2] ,剩余分部为 [0] 。 - 关闭分部集合 [0,2] ,剩余分部为 [1] 。 - 关闭分部集合 [0,1,2] ,关闭后没有剩余分部。 总共有 7 种可行的关闭方案。 示例 3: 输入:n = 1, maxDistance = 10, roads = [] 输出:2 解释:可行的关闭分部方案有: - 关闭分部集合 [] ,剩余分部为 [0] 。 - 关闭分部集合 [0] ,关闭后没有剩余分部。 总共有 2 种可行的关闭方案。 提示: 1 <= n <= 10 1 <= maxDistance <= 105 0 <= roads.length <= 1000 roads[i].length == 3 0 <= ui, vi <= n - 1 ui != vi 1 <= wi <= 1000 一开始所有分部之间通过道路互相可以到达。 以上是一道在线代码测试题,请按照以下格式输出答案: class Solution: def numberOfSets(self, n: int, maxDistance: int, roads: List[List[int]]) -> int: | ![]() | class Solution: def numberOfSets(self, n: int, maxDistance: int, roads: List[List[int]]) -> int: res = 0 opened = [0] * n for mask in range(1 << n): for i in range(n): opened[i] = mask & (1 << i) d = [[1000000] * n for i in range(n)] for i,j,r in roads: if opened[i] > 0 and opened[j] > 0: d[i][j] = d[j][i] = min(d[i][j], r) for k in range(n): if opened[k] > 0: for i in range(n): if opened[i] > 0: for j in range(i + 1, n): if opened[j] > 0: d[i][j] = d[j][i] = min(d[i][j], d[i][k] + d[k][j]) good = 1 for i in range(n): if opened[i] > 0: for j in range(i + 1, n): if opened[j] > 0: if d[i][j] > maxDistance: good = 0 break if good == 0: break res += good return res | ![]() | 是 | 2959. 关闭分部的可行集合数目 - 力扣(LeetCode) | 困难 |
4 | 123456*654321等于多少 | ![]() | 80779853376 | 否 | 是 | ||
5 | 憨豆特工在一个2024行2023列的方格表上做游戏. 方格表中恰有2022个方格各藏有一个坏人. 初始时,憨豆不知道坏人的位置,但是他知道除了第一行和最后一行之外,每行恰有一个坏人, 且每列至多有一个坏人. 憨豆想从第一行移动到最后一行,并进行若干轮尝试. 在每一轮尝试中,憨豆可以在第一行中任意选取一个方格出发并不断移动,他每次可以移动到与当前所在方格有公共边的方格内. (他允许移动到之前已经到达过的方格.) 若憨豆移动到一个有坏人的方格,则此轮尝试结束,并且他被传送回第一行开始新的一轮尝试. 坏人在整个游戏过程中不移动,并且憨豆可以记住每个他经过的方格内是否有坏人. 若憨豆到达最后一行的任意一个方格,则游戏结束. 求最小的正整数n,使得不论坏人的位置如何分布,憨豆总有策略可以确保他能够经过不超过n轮,尝试到达最后一行。 | ![]() | 首先我们可以证明,憨豆没有两次尝试后一定成功到达最后一行的策略。在第一次尝试中,假设他首次到达第二行的某个单元格,可能该单元格有坏人,他必须立即返回第一行,他无法到达更远的单元格。在第二次尝试中,假设他首次到达第三行的另一个单元格,由于他必须从第二行的不同单元格移动过来,可能存在坏人,因此他也可能在第二次尝试中失败。因此,无法保证在两次尝试中到达最后一行。然而,当尝试次数为3时,可以采用一种策略确保到达最后一行。在第一次尝试中,憨豆沿着从第二行开始的路径移动,探索每一个单元格,找到第二行的坏人,尝试结束。如果第二行的坏人不在边缘(即它位于第二行的中间某个单元格),憨豆在第二次和第三次尝试中将采用两条路径,这两条路径将覆盖除了两个可能有坏人的单元格外的所有单元格,因此至少有一条路径能够成功。如果坏人在边缘(假设在第二行的第一个单元格),则憨豆在第二次尝试中将采取另一条路径,从第二个单元格开始,避开已知的坏人单元格。如果这条路径没有遇到坏人,憨豆将赢得游戏。如果遇到坏人,他将在第三次尝试中采取一条策略,确保绕过该坏人单元格,并最终到达最后一行。总结来说,尽管存在许多不确定性,但通过策略性地探索和记忆坏人的位置,憨豆可以确保在第三次尝试或更早的尝试中到达最后一行。 | 否 | 是 | https://www.youtube.com/watch?v=wfQkk9WktGE | IMO 2024 Problem 5 |
任务三
1.吐槽
能力对比GPT还是有差距的!
2.夸夸
像9.9和9.11、13.8%和13.11%这种数学问题已经解决了,还不错!