zoukankan      html  css  js  c++  java
  • 第153周竞赛题

    第153周竞赛题

    1184.公交站间的距离

    一.题目描述

    环形公交路线上有 n 个站,按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号为 (i + 1) % n 的车站之间的距离。

    环线上的公交车都可以按顺时针和逆时针的方向行驶。

    返回乘客从出发点** start 到目的地 destination **之间的最短距离。

    示例1:

    from IPython.display import Image
    
    Image("./data/1.jpg",width=500)
    

    output_7_0.jpeg

    输入:distance = [1,2,3,4], start = 0, destination = 1

    输出:1

    解释:公交站 0 和 1 之间的距离是 1 或 9,最小值是 1。

    示例2:

    Image("./data/2.jpg",width=500)
    

    output_10_0.jpeg

    输入:distance = [1,2,3,4], start = 0, destination = 2

    输出:3

    解释:公交站 0 和 2 之间的距离是 3 或 7,最小值是 3。

    示例3:

    Image("./data/3.jpg",width=500)
    

    output_13_0.jpeg

    输入:distance = [1,2,3,4], start = 0, destination = 3

    输出:4

    解释:公交站 0 和 3 之间的距离是 6 或 4,最小值是 4。

    提示:

    • 1 <= n <= 10^4
    • distance.length == n
    • 0 <= start, destination < n
    • 0 <= distance[i] <= 10^4

    二.题目思考

    由于路线是一个环路,我们先求路程总和sum.然后从start到destination的距离distance,取两者最小值即可

    三.代码

    class Solution:
        def distanceBetweenBusStops(self,distance,start,destination):
            sum=0
            length=len(distance)
    
            for i in range(length):
                sum+=distance[i]
    
            ret=0
    
            i=start
            while i!=destination:
                ret+=distance[i]
                i=(i+1)%length
    
            return min(ret,sum-ret)
    
    if __name__=="__main__":
        solution=Solution()
        print(solution.distanceBetweenBusStops([1,2,3,4],0,3))
    
    4
    

    1185.一周中的第几天

    一.题目描述

    给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。

    输入为三个整数:day、month 和 year,分别表示日、月、年。

    您返回的结果必须是这几个值中的一个** {“Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”}。**

    示例1:

    输入:day = 31, month = 8, year = 2019

    输出:“Saturday”

    示例2:

    输入:day = 18, month = 7, year = 1999

    输出:“Sunday”

    示例3:

    输入:day = 15, month = 8, year = 1993

    输出:“Sunday”

    提示:

    • 给出的日期一定是在** 1971 2100 **年之间的有效日期。

    二.题目描述

    三.代码

    class Solution:
        def isLeap(self, year: int) -> bool:
            if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
                return True
            else:
                return False
    
        def dayOfTheWeek(self, day: int, month: int, year: int) -> str:
            ret = 4
    
            for i in range(1971, year):
                if self.isLeap(i):
                    ret += 366
                else:
                    ret += 365
    
            days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    
            for i in range(1, month):
                if self.isLeap(year) and i == 2:
                    ret += 29
                else:
                    ret += days[i]
    
            ret += day
            ans = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
            ret = ret % 7
    
            return ans[ret]
    
    
    if __name__=="__main__":
        solution=Solution()
        print(solution.dayOfTheWeek(31,8,2019))
    
    Saturday
    

    附件:

  • 相关阅读:
    Note/Solution 转置原理 & 多点求值
    Note/Solution 「洛谷 P5158」「模板」多项式快速插值
    Solution 「CTS 2019」「洛谷 P5404」氪金手游
    Solution 「CEOI 2017」「洛谷 P4654」Mousetrap
    Solution Set Border Theory
    Solution Set Stirling 数相关杂题
    Solution 「CEOI 2006」「洛谷 P5974」ANTENNA
    Solution 「ZJOI 2013」「洛谷 P3337」防守战线
    Solution 「CF 923E」Perpetual Subtraction
    KVM虚拟化
  • 原文地址:https://www.cnblogs.com/LQ6H/p/12940552.html
Copyright © 2011-2022 走看看