from collections import defaultdict
def num_dc(A):
    res = 0
    n = N
    dp = [defaultdict(int) for _ in range(n)]
    for i in range(1, n):
        for j in range(i):
            diff = A[i] - A[j]
            dp[i][diff] += 1
            if diff in dp[j]:
                dp[i][diff] += dp[j][diff]
                res += dp[j][diff]
    return res
N = int(input())
A = list(map(int, input().split()))
print((num_dc(A)+int(N*(N+1)/2))%9901)

解题思路:就是找到3个和3个以上的等差数列+2个/1个,

以 A = [1,4,2,3,7]举例,After iteration 1,这里1为i的值

Initial state:

i  |  dp

--------------

0  |  defaultdict(<class 'int'>, {})

1  |  defaultdict(<class 'int'>, {})

2  |  defaultdict(<class 'int'>, {})

3  |  defaultdict(<class 'int'>, {})

4  |  defaultdict(<class 'int'>, {})


res = 0


After iteration 1:

i  |  dp

--------------

0  |  defaultdict(<class 'int'>, {})

1  |  defaultdict(<class 'int'>, {3: 1})

2  |  defaultdict(<class 'int'>, {})

3  |  defaultdict(<class 'int'>, {})

4  |  defaultdict(<class 'int'>, {})


res = 0


After iteration 2:

i  |  dp

--------------

0  |  defaultdict(<class 'int'>, {})

1  |  defaultdict(<class 'int'>, {3: 1})

2  |  defaultdict(<class 'int'>, {1: 1, -2: 1})

3  |  defaultdict(<class 'int'>, {})

4  |  defaultdict(<class 'int'>, {})


res = 0


After iteration 3:

i  |  dp

--------------

0  |  defaultdict(<class 'int'>, {})

1  |  defaultdict(<class 'int'>, {3: 1})

2  |  defaultdict(<class 'int'>, {1: 1, -2: 1})

3  |  defaultdict(<class 'int'>, {2: 1, -1: 1, 1: 2})

4  |  defaultdict(<class 'int'>, {})


res = 1


After iteration 4:

i  |  dp

--------------

0  |  defaultdict(<class 'int'>, {})

1  |  defaultdict(<class 'int'>, {3: 1})

2  |  defaultdict(<class 'int'>, {1: 1, -2: 1})

3  |  defaultdict(<class 'int'>, {2: 1, -1: 1, 1: 2})

4  |  defaultdict(<class 'int'>, {6: 1, 3: 2, 5: 1, 4: 1})


res = 2


计算差值并记录出现次数:

diff = 1 出现了 2 次,此时 res 加 1。

diff = 3 出现了 2 次,此时 res 加 1。

同理出现了3次,res+2

最终返回 res 的值为 2。



点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论