zoukankan      html  css  js  c++  java
  • b_zj_头条校招(分类讨论)

    一场考试包含3道题,难度从小到大分别为a,b,c,且满足下列条件:
    a<=b<=c
    b-a<=10
    c-b<=10
    所有出题人一共出了n(n<1e5)道开放性题目,然而由于上述条件的限制,可能有一些考试没法凑够3道题,你能计算出我们最少还需要再出几道题吗?

    思路

    • 如果两道题相差20以上,则需要额外添加两道
    • 如果三道题都在10及以内,那这三道可以尝试看做一套题,故f[i]=min(f[i], f[i-3])
    • 如果D[i]-D[i-1]<=20,在中间添加一道题即可,故f[i]=min(f[i], f[i-1]+1)

    只过了70%...不清楚哪里有错

    def solve(n,A):
        d,f=0,[0]*(n+1)
        for i in range(1,n+1):
            if i>=1 and A[i]-A[i-1]>20: f[i]=min(f[i], f[i-1]+2) #默认需要额外出两道题
            elif i>=1 and A[i]-A[i-1]<=20: f[i]=min(f[i], f[i-1]+1)
            elif i>=2 and A[i]-A[i-1]<=10 and A[i-1]-A[i-2]<=10: f[i]=min(f[i], f[i-2])
            if i>1: d=max(d,A[i]-A[i-1])
        return 3-n%3 if d<=10 else f[n] #如果差值都小于10,则差几道题补几道题
    n=int(input())
    A=sorted(list(map(int, input().split())))
    A.insert(0,0)
    print(solve(n,A))
    
  • 相关阅读:
    软工实践个人总结
    第06组 Beta版本演示
    第06组 Beta冲刺(5/5)
    第06组 Beta冲刺(4/5)
    第06组 Beta冲刺(3/5)
    第06组 Beta冲刺(2/5)
    第06组 Beta冲刺(1/5)
    第06组 Alpha事后诸葛亮
    第06组 Alpha冲刺(6/6)
    第06组 Alpha冲刺(5/6)
  • 原文地址:https://www.cnblogs.com/wdt1/p/14148720.html
Copyright © 2011-2022 走看看