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]
  • 两组对应相乘
 
n = int(input())
nums = [int(x) for x in input().split(" ")]           
compare_count = {}
for i in range(n):
    compare_count[i]= [0,0,0,0]
 
result = 0
k=1
while(True):
    if(k>=n):
        break
    else :
        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)
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

laufing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值