洛谷题单2-P1424 小鱼的航程(改进版)-python-流程图重构

题目描述

有一只小鱼,它平日每天游泳 250250250 公里,周末休息(实行双休日),假设从周 xxx 开始算起,过了 nnn 天以后,小鱼一共累计游泳了多少公里呢?

输入格式

输入两个正整数 x,nx,nx,n,表示从周 xxx 算起,经过 nnn 天。

输出格式

输出一个整数,表示小鱼累计游泳了多少公里。

输入输出样例

输入

3 10

输出

2000

说明/提示

数据保证,1≤x≤71\le x \le 71x71≤n≤1061 \le n\le 10^61n106

方式

代码

class Solution:
    @staticmethod
    def oi_input():
        """从标准输入读取数据"""
        x, n = map(int, input().split())
        return x, n

    @staticmethod
    def oi_test():
        """提供测试数据"""
        return 3, 10

    @staticmethod
    def solution(x, n):
        now = x - 1
        total = (n // 7) * 1250

        for _ in range(n % 7):
            if now <= 4:  # 工作日(周一到周五)
                total += 250
            now = (now + 1) % 7  # 更新到下一天

        print(total)


oi_input = Solution.oi_input
oi_test = Solution.oi_test
solution = Solution.solution

if __name__ == '__main__':
    x, n = oi_test()
    # x, n = oi_input()
    solution(x, n)

流程图

每日处理
当前是工作日?
now <= 4
循环处理剩余天数
for _ in range(remain_days)
累加工资250元
total += 250
跳过
更新星期索引
now = (now+1)%7
开始
主函数调用
读取输入数据
x, n = map(int, input().split())
初始化当前星期索引
now = x-1
计算完整周工资
total = (n//7)*1250
计算剩余天数
remain_days = n % 7
格式化输出总工资
print(total)
结束
### 目描述 目 **P1424 小鱼航程** 描述了一只小鱼从起点出发,沿着一条河流游动,并需要经过若干个站点。每个站点之间有一定的距离,且每个站点都有特定的要求(例如停留时间、是否可以跳跃等)。最终目标是计算出小鱼到达终点所需的最短时间和路径。 #### 改进版 Python 解法思路: 我们可以将这个问视为一个图论问,其中每个站点是一个节点,边表示两个站点之间的距离。为了求解最短路径和时间,通常可以采用广度优先搜索 (BFS) 或者 Dijkstra 算法。这里我们选择 BFS 来解决问,因为它适用于无权图或者所有边权重相等的情况,而本中各个站点间的“代价”相对简。 ##### 步骤解析: 1. **初始化队列**: 把起始位置加入到待处理队列里。 2. **记录状态信息**: 使用字典或者其他数据结构保存已经访问过的点及其最小花费的时间。 3. **遍历过程**: - 每次取出当前最早入队的那个元素; - 对该点的所有邻居依次尝试前进一步; * 如果能直接抵达未标记的新地点,则更新其时间为现在的时刻加上所需时间并将其放入队尾等待后续探索; * 若遇到特殊规则如休息站等则按要求调整策略再继续前进直到结束为止. 4. **终止条件**: 当成功触达目的地时停止迭代返回结果;如果整个过程中都无法达到目的地方案应报错无法完成任务。 以下是基于上述思想的一个简化版本代码示例: ```python from collections import deque def min_time_to_reach_target(n, edges): # n: number of nodes including start and end point; # edges: list of tuples [(node_a, node_b, travel_time), ...] adj_list = [[] for _ in range(n)] # Adjacency List representation for u, v, w in edges: adj_list[u].append((v,w)) queue = deque([(0, 0)]) # Initialize with starting position at time=0 visited_times = [float('inf')] * n visited_times[0] = 0 while queue: current_node, elapsed_time = queue.popleft() if current_node == n-1: # Reach the target break for neighbor, travel_cost in adj_list[current_node]: new_time = elapsed_time + travel_cost if new_time < visited_times[neighbor]: visited_times[neighbor] = new_time queue.append((neighbor, new_time)) return visited_times[-1] # Example usage: n = 5 # Total points from source to destination inclusive edges_data = [ (0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5) ] print("Minimum Time:",min_time_to_reach_target(n, edges_data)) ``` 这段程序实现了对给定输入的一条最优路线查找功能,即找到从源结点到汇点所耗最少时间的行走方案。对于更复杂的需求比如某些中途需停靠或是有其他限制条件的任务,还需进一步修改算法细节适应变化后的场景需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值