P10708 [NOISG2024 Prelim] Tourist

题目传送门

思路:

这道题的目标是计算在 N 天内游览城市所需的最小火车票花费。我们有两种火车票可以选择:单程票和单日票。单程票每次乘坐花费 x 元,而单日票可以在一天内不限次数乘坐,花费 y 元。

具体步骤如下:

  1. 读取输入数据,包括天数 N、单程票价格 x、单日票价格 y 以及每天需要乘坐的火车次数 ai。
  2. 初始化总花费为 0。
  3. 对于每一天 i:
    • 计算如果购买单程票的总花费:ai * x。
    • 比较 ai * x 和 y,选择较小的值作为这一天所需的最小花费。
    • 将这一天的最小花费加到总花费中。
  4. 输出总花费。

通过这种方法,我们可以确保每一天都选择了最经济的购票方式,从而得到整个行程的最小花费。

 

代码&解释:

 c++代码:

#include<iostream>
using namespace std;

int n,oneway,singleday;
int day[114514];
int cost = 0;

int main(){
    cin>>n>>oneway>>singleday;
    for(int i = 1;i <= n;i++){
        cin>>day[i];
        if(day[i] * oneway < singleday){
            int x = day[i] * oneway;
            cost += x;
        }
        else cost += singleday;
    }
    
    cout<<cost<<endl;
}

代码解释:

  1. 变量声明

    声明了变量 n(天数)、oneway(单程票价格)、singleday(单日票价格)、day 数组(存储每天的火车乘坐次数)和 cost(总花费)。

  2. 主函数

    int main(){
        cin >> n >> oneway >> singleday;
        for(int i = 1; i <= n; i++){
            cin >> day[i];
            if(day[i] * oneway < singleday){
                int x = day[i] * oneway;
                cost += x;
            }
            else cost += singleday;
        }
        
        cout << cost << endl;
    }
    
    • 读取输入的 noneway 和 singleday
    • 循环读取每天的火车乘坐次数 day[i]
    • 对于每一天,计算如果购买单程票的总花费 day[i] * oneway,并与单日票价格 singleday 比较,选择较小的花费累加到 cost 中。
    • 最后输出总花费 cost

Python代码:

def min_cost(n, oneway, singleday, days):
    cost = 0
    for ai in days:
        single_cost = ai * oneway
        day_cost = min(single_cost, singleday)
        cost += day_cost
    return cost

# 读取输入
n, oneway, singleday = map(int, input().split())
days = list(map(int, input().split()))

# 计算并输出最小花费
print(min_cost(n, oneway, singleday, days))

代码解释:

  1. 函数定义

    def min_cost(n, oneway, singleday, days):
        cost = 0
        for ai in days:
            single_cost = ai * oneway
            day_cost = min(single_cost, singleday)
            cost += day_cost
        return cost
    

    CopyInsert

    定义了一个函数 min_cost,接受天数 n、单程票价格 oneway、单日票价格 singleday 和每天的火车乘坐次数列表 days,返回最小花费。

  2. 读取输入

    n, oneway, singleday = map(int, input().split())
    days = list(map(int, input().split()))
    

    CopyInsert

    读取输入的 noneway 和 singleday,以及每天的火车乘坐次数列表 days

  3. 计算并输出最小花费

    print(min_cost(n, oneway, singleday, days))
    

    CopyInsert

    调用 min_cost 函数计算最小花费并输出结果。通过这种方式,Python代码实现了与C++代码相同的功能,即计算在N天内游览城市所需的最小火车票花费。

Pascal代码:

program Tourist;

const
  MAXN = 1000;

var
  n, oneway, singleday, i, cost: longint;
  day: array[1..MAXN] of longint;

begin
  // 初始化总花费
  cost := 0;
  
  // 读取输入
  readln(n, oneway, singleday);
  for i := 1 to n do
    read(day[i]);

  // 计算最小花费
  for i := 1 to n do
  begin
    if day[i] * oneway < singleday then
      cost := cost + day[i] * oneway
    else
      cost := cost + singleday;
  end;

  // 输出结果
  writeln(cost);
end.

代码解释:

  1. 常量声明

    const
      MAXN = 1000;
    

    声明数组的最大长度为 1000,符合题目数据范围。

  2. 变量声明

    var
      n, oneway, singleday, i, cost: longint;
      day: array[1..MAXN] of longint;
    

    声明了变量 n(天数)、oneway(单程票价格)、singleday(单日票价格)、i(循环变量)、cost(总花费),以及数组 day(存储每天的火车乘坐次数)。

  3. 读取输入

    readln(n, oneway, singleday);
    for i := 1 to n do
      read(day[i]);
    

    使用 readln 读取 noneway 和 singleday,然后使用 for 循环读取每天的火车乘坐次数 day[i]

 

希望这些代码能帮助您理解并解决这个问题,如果有问题,请随时提问。
  蒟蒻题解,神犇勿喷,点个赞再走吧!QAQ
  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值