OD C卷 - 结对编程

结对编程(200)

  • 某部门计划通过结队编程来进行项目开发,部门有N名员工,每个员工有唯一的职级,三个员工为一组,结队分组规则如下:
  • 选出序号为i,j,k的员工,职级分别为level[i], level[j], level[k],满足level[i]<level[j]<level[k] 或者 level[i] > level[j] > level[k] 其中0<i<j<k<n
  • 计算可能组合的小组数量,同一员工可以参加多个小组;

输入描述:

第一行:员工总数n,【1,6000】

第二行:按序号依次排列的员工的职级,level[i] 在【1,10^5】
输出描述:

可能结对的小组数量

示例1

输入:

4

1 2 3 4

输出:

4

说明:

(1,2,3)(1,2,4) (1,3,4) (2,3,4)

示例2

输入:

3

5 4 7

输出:

0

思路:

  • 找到满足两个条件的小组;
    • 条件1,0<i<j<k<n;
    • 条件2,level[i]<level[j]<level[k] 或者 level[i] > level[j] > level[k]
  • 两组对应相乘
python 复制代码
n = int(input().strip())
nums = list(map(int, input().strip().split()))

# 员工序号
compare_count = {}
for i in range(n):
    compare_count[i] = [0, 0, 0, 0]


result = 0
k = 1
while k < n:
    for j in range(k):
        if nums[j] < nums[k]:
            compare_count[k][0] += 1
        elif nums[j] > nums[k]:
            compare_count[k][1] += 1
    k += 1


for i in range(n - 2, 0, -1):
    for j in range(n - 1, i, -1):
        if nums[j] < nums[i]:
            compare_count[i][2] += 1
        elif nums[j] > nums[i]:
            compare_count[i][3] += 1

for i in range(n):
    temp = compare_count[i]
    result += temp[0] * temp[3] + temp[1] * temp[2]

print(result)
相关推荐
laufing4 个月前
OD C卷 - 幼儿园篮球游戏
双指针·python算法
laufing4 个月前
OD C卷 - 5G网络建设
·并查集·python算法
laufing4 个月前
OD C卷 - 小扇和小船的数字游戏
二进制·python算法
laufing5 个月前
OD C卷 - CPU算力分配
逻辑分析·python算法
laufing5 个月前
OD C卷 - 最多购买宝石数目
滑动窗口·python算法
laufing5 个月前
OD C卷 - 宽度最小的子矩阵
滑动窗口·python算法
laufing5 个月前
OD C卷 - 体育场找座位
逻辑分析·python算法