【阿尼亚探索大模型】书生大模型实战营-进阶岛第1关(L2G1000)探索 InternLM 模型能力边界

任务类型任务内容
任务一InternThinker 挑战 Leetcode
任务二考倒 InternThinker
任务三吐槽 OR 夸夸 (可选)

任务一

序号

Leetcode题目链接

Prompt

InternThinker 回答截图

Leetcode 提交结果

评论

11812. 判断国际象棋棋盘中一个格子的颜色 - 力扣(LeetCode)

1812. 判断国际象棋棋盘中一个格子的颜色

给你一个坐标 coordinates ,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。

如果所给格子的颜色是白色,请你返回 true,如果是黑色,请返回 false 。

给定坐标一定代表国际象棋棋盘上一个存在的格子。坐标第一个字符是字母,第二个字符是数字。
示例 1:

输入:coordinates = "a1"
输出:false
解释:如上图棋盘所示,"a1" 坐标的格子是黑色的,所以返回 false 。
示例 2:

输入:coordinates = "h3"
输出:true
解释:如上图棋盘所示,"h3" 坐标的格子是白色的,所以返回 true 。
示例 3:

输入:coordinates = "c7"
输出:false

提示:
coordinates.length == 2
'a' <= coordinates[0] <= 'h'
'1' <= coordinates[1] <= '8'

以上是一道在线代码测试题,请按照以下格式输出答案:


class Solution:
    def squareIsWhite(self, coordinates: str) -> bool:

简单
2935. 骑士拨号器 - 力扣(LeetCode)

935. 骑士拨号器
​象棋骑士有一个独特的移动方式,它可以垂直移动两个方格,水平移动一个方格,或者水平移动两个方格,垂直移动一个方格(两者都形成一个 L 的形状)。

象棋骑士可能的移动方式如下图所示:

我们有一个象棋骑士和一个电话垫,如下所示,骑士只能站在一个数字单元格上(即蓝色单元格)。

给定一个整数 n,返回我们可以拨多少个长度为 n 的不同电话号码。

你可以将骑士放置在任何数字单元格上,然后你应该执行 n - 1 次移动来获得长度为 n 的号码。所有的跳跃应该是有效的骑士跳跃。

因为答案可能很大,所以输出答案模 109 + 7.

示例 1:

输入:n = 1
输出:10
解释:我们需要拨一个长度为1的数字,所以把骑士放在10个单元格中的任何一个数字单元格上都能满足条件。
示例 2:

输入:n = 2
输出:20
解释:我们可以拨打的所有有效号码为[04, 06, 16, 18, 27, 29, 34, 38, 40, 43, 49, 60, 61, 67, 72, 76, 81, 83, 92, 94]
示例 3:

输入:n = 3131
输出:136006598
解释:注意取模
提示:

1 <= n <= 5000

以上是一道在线代码测试题,请按照以下格式输出答案:

​class Solution:
    def knightDialer(self, n: int) -> int:
        

中等
32717. 半有序排列 - 力扣(LeetCode)

2717. 半有序排列
给你一个下标从 0 开始、长度为 n 的整数排列 nums 。
如果排列的第一个数字等于 1 且最后一个数字等于 n ,则称其为 半有序排列 。你可以执行多次下述操作,直到将 nums 变成一个 半有序排列 :
选择 nums 中相邻的两个元素,然后交换它们。
返回使 nums 变成 半有序排列 所需的最小操作次数。
排列 是一个长度为 n 的整数序列,其中包含从 1 到 n 的每个数字恰好一次。

示例 1:
输入:nums = [2,1,4,3]
输出:2
解释:可以依次执行下述操作得到半有序排列:
1 - 交换下标 0 和下标 1 对应元素。排列变为 [1,2,4,3] 。
2 - 交换下标 2 和下标 3 对应元素。排列变为 [1,2,3,4] 。
可以证明,要让 nums 成为半有序排列,不存在执行操作少于 2 次的方案。
示例 2:
输入:nums = [2,4,1,3]
输出:3
解释:
可以依次执行下述操作得到半有序排列:
1 - 交换下标 1 和下标 2 对应元素。排列变为 [2,1,4,3] 。
2 - 交换下标 0 和下标 1 对应元素。排列变为 [1,2,4,3] 。
3 - 交换下标 2 和下标 3 对应元素。排列变为 [1,2,3,4] 。
可以证明,要让 nums 成为半有序排列,不存在执行操作少于 3 次的方案。
示例 3:
输入:nums = [1,3,4,2,5]
输出:0
解释:这个排列已经是一个半有序排列,无需执行任何操作。

提示:
2 <= nums.length == n <= 50
1 <= nums[i] <= 50
nums 是一个 排列


以上是一道在线代码测试题,请按照以下格式输出答案:


class Solution:
        def semiOrderedPermutation(self, nums: List[int]) -> int:

简单
43264. K 次乘运算后的最终数组 I - 力扣(LeetCode)

3264. K 次乘运算后的最终数组 I
给你一个整数数组 nums ,一个整数 k  和一个整数 multiplier 。
你需要对 nums 执行 k 次操作,每次操作中:
找到 nums 中的 最小 值 x ,如果存在多个最小值,选择最 前面 的一个。
将 x 替换为 x * multiplier 。
请你返回执行完 k 次乘运算之后,最终的 nums 数组。
示例 1:
输入:nums = [2,1,3,5,6], k = 5, multiplier = 2
输出:[8,4,6,5,6]
解释:
操作    结果
1 次操作后    [2, 2, 3, 5, 6]
2 次操作后    [4, 2, 3, 5, 6]
3 次操作后    [4, 4, 3, 5, 6]
4 次操作后    [4, 4, 6, 5, 6]
5 次操作后    [8, 4, 6, 5, 6]
示例 2:
输入:nums = [1,2], k = 3, multiplier = 4
输出:[16,8]
解释:
操作    结果
1 次操作后    [4, 2]
2 次操作后    [4, 8]
3 次操作后    [16, 8]
 提示:
1 <= nums.length <= 100
1 <= nums[i] <= 100
1 <= k <= 10
1 <= multiplier <= 5

以上是一道在线代码测试题,请按照以下格式输出答案:

class Solution:

        def getFinalState(self, nums: List[int], k: int, multiplier: int) -> List[int]:

简单
5908. 最小差值 I - 力扣(LeetCode)

908. 最小差值 I
给你一个整数数组 nums,和一个整数 k 。
在一个操作中,您可以选择 0 <= i < nums.length 的任何索引 i 。将 nums[i] 改为 nums[i] + x ,其中 x 是一个范围为 [-k, k] 的任意整数。对于每个索引 i ,最多 只能 应用 一次 此操作。
nums 的 分数 是 nums 中最大和最小元素的差值。 
在对  nums 中的每个索引最多应用一次上述操作后,返回 nums 的最低 分数 。
示例 1:
输入:nums = [1], k = 0
输出:0
解释:分数是 max(nums) - min(nums) = 1 - 1 = 0。
示例 2:
输入:nums = [0,10], k = 2
输出:6
解释:将 nums 改为 [2,8]。分数是 max(nums) - min(nums) = 8 - 2 = 6。
示例 3:
输入:nums = [1,3,6], k = 3
输出:0
解释:将 nums 改为 [4,4,4]。分数是 max(nums) - min(nums) = 4 - 4 = 0。
提示:
1 <= nums.length <= 104
0 <= nums[i] <= 104
0 <= k <= 104

以上是一道在线代码测试题,请按照以下格式输出答案:

class Solution:
        def smallestRangeI(self, nums: List[int], k: int) -> int:

简单

任务二

序号

Prompt

InternThinker 回答截图题目正确答案

InternThinker 回答是否正确

(请找出错误的例子)

您是否对参考答案有把握

题目来源

(如有请贴链接)

评论
1一个农夫带着一只狼,一只羊和一颗白菜过河,河边有一条船,农夫一次可以携带三个对象过河。但是,如无人看管,狼要吃羊,羊要吃菜。问农夫如何安排过河,才能使狼、羊、白菜都安全过河。第一次过河:狼、羊、白菜,所有物品都安全到达对岸,没有任何损失!
2

2931. 购买物品的最大开销
给你一个下标从 0 开始大小为 m * n 的整数矩阵 values ,表示 m 个不同商店里 m * n 件不同的物品。每个商店有 n 件物品,第 i 个商店的第 j 件物品的价值为 values[i][j] 。除此以外,第 i 个商店的物品已经按照价值非递增排好序了,也就是说对于所有 0 <= j < n - 1 都有 values[i][j] >= values[i][j + 1] 。
每一天,你可以在一个商店里购买一件物品。具体来说,在第 d 天,你可以:
选择商店 i 。
购买数组中最右边的物品 j ,开销为 values[i][j] * d 。换句话说,选择该商店中还没购买过的物品中最大的下标 j ,并且花费 values[i][j] * d 去购买。
注意,所有物品都视为不同的物品。比方说如果你已经从商店 1 购买了物品 0 ,你还可以在别的商店里购买其他商店的物品 0 。
请你返回购买所有 m * n 件物品需要的 最大开销 。
示例 1:
输入:values = [[8,5,2],[6,4,1],[9,7,3]]
输出:285
解释:第一天,从商店 1 购买物品 2 ,开销为 values[1][2] * 1 = 1 。
第二天,从商店 0 购买物品 2 ,开销为 values[0][2] * 2 = 4 。
第三天,从商店 2 购买物品 2 ,开销为 values[2][2] * 3 = 9 。
第四天,从商店 1 购买物品 1 ,开销为 values[1][1] * 4 = 16 。
第五天,从商店 0 购买物品 1 ,开销为 values[0][1] * 5 = 25 。
第六天,从商店 1 购买物品 0 ,开销为 values[1][0] * 6 = 36 。
第七天,从商店 2 购买物品 1 ,开销为 values[2][1] * 7 = 49 。
第八天,从商店 0 购买物品 0 ,开销为 values[0][0] * 8 = 64 。
第九天,从商店 2 购买物品 0 ,开销为 values[2][0] * 9 = 81 。
所以总开销为 285 。
285 是购买所有 m * n 件物品的最大总开销。
示例 2:
输入:values = [[10,8,6,4,2],[9,7,5,3,2]]
输出:386
解释:第一天,从商店 0 购买物品 4 ,开销为 values[0][4] * 1 = 2 。
第二天,从商店 1 购买物品 4 ,开销为 values[1][4] * 2 = 4 。
第三天,从商店 1 购买物品 3 ,开销为 values[1][3] * 3 = 9 。
第四天,从商店 0 购买物品 3 ,开销为 values[0][3] * 4 = 16 。
第五天,从商店 1 购买物品 2 ,开销为 values[1][2] * 5 = 25 。
第六天,从商店 0 购买物品 2 ,开销为 values[0][2] * 6 = 36 。
第七天,从商店 1 购买物品 1 ,开销为 values[1][1] * 7 = 49 。
第八天,从商店 0 购买物品 1 ,开销为 values[0][1] * 8 = 64 。
第九天,从商店 1 购买物品 0 ,开销为 values[1][0] * 9 = 81 。
第十天,从商店 0 购买物品 0 ,开销为 values[0][0] * 10 = 100 。
所以总开销为 386 。
386 是购买所有 m * n 件物品的最大总开销。
 提示:
1 <= m == values.length <= 10
1 <= n == values[i].length <= 104
1 <= values[i][j] <= 106
values[i] 按照非递增顺序排序。

以上是一道在线代码测试题,请按照以下格式输出答案:

class Solution:
        def maxSpending(self, values: List[List[int]]) -> int:

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)困难
32959. 关闭分部的可行集合数目
一个公司在全国有 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)困难
4123456*654321等于多少80779853376
5憨豆特工在一个2024行2023列的方格表上做游戏. 方格表中恰有2022个方格各藏有一个坏人. 初始时,憨豆不知道坏人的位置,但是他知道除了第一行和最后一行之外,每行恰有一个坏人, 且每列至多有一个坏人. 憨豆想从第一行移动到最后一行,并进行若干轮尝试. 在每一轮尝试中,憨豆可以在第一行中任意选取一个方格出发并不断移动,他每次可以移动到与当前所在方格有公共边的方格内. (他允许移动到之前已经到达过的方格.) 若憨豆移动到一个有坏人的方格,则此轮尝试结束,并且他被传送回第一行开始新的一轮尝试. 坏人在整个游戏过程中不移动,并且憨豆可以记住每个他经过的方格内是否有坏人. 若憨豆到达最后一行的任意一个方格,则游戏结束. 求最小的正整数n,使得不论坏人的位置如何分布,憨豆总有策略可以确保他能够经过不超过n轮,尝试到达最后一行。

首先我们可以证明,憨豆没有两次尝试后一定成功到达最后一行的策略。在第一次尝试中,假设他首次到达第二行的某个单元格,可能该单元格有坏人,他必须立即返回第一行,他无法到达更远的单元格。在第二次尝试中,假设他首次到达第三行的另一个单元格,由于他必须从第二行的不同单元格移动过来,可能存在坏人,因此他也可能在第二次尝试中失败。因此,无法保证在两次尝试中到达最后一行。然而,当尝试次数为3时,可以采用一种策略确保到达最后一行。在第一次尝试中,憨豆沿着从第二行开始的路径移动,探索每一个单元格,找到第二行的坏人,尝试结束。如果第二行的坏人不在边缘(即它位于第二行的中间某个单元格),憨豆在第二次和第三次尝试中将采用两条路径,这两条路径将覆盖除了两个可能有坏人的单元格外的所有单元格,因此至少有一条路径能够成功。如果坏人在边缘(假设在第二行的第一个单元格),则憨豆在第二次尝试中将采取另一条路径,从第二个单元格开始,避开已知的坏人单元格。如果这条路径没有遇到坏人,憨豆将赢得游戏。如果遇到坏人,他将在第三次尝试中采取一条策略,确保绕过该坏人单元格,并最终到达最后一行。总结来说,尽管存在许多不确定性,但通过策略性地探索和记忆坏人的位置,憨豆可以确保在第三次尝试或更早的尝试中到达最后一行。

https://www.youtube.com/watch?v=wfQkk9WktGEIMO 2024 Problem 5

任务三

1.吐槽

能力对比GPT还是有差距的!

2.夸夸

像9.9和9.11、13.8%和13.11%这种数学问题已经解决了,还不错!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱波吉的阿尼亚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值