Train and Queries(map函数)

本文介绍了一种使用C++编程语言实现的火车路线查询算法,通过创建l和r两个映射来记录站台的最早和最晚出现位置,快速判断是否存在顺序的两个指定车厢在给定站台的火车路线。
摘要由CSDN通过智能技术生成

题目名字 Train and Queries

[题目链接]https://www.luogu.com.cn/problem/P187

题意

给定多少个站台,然后输入每个站台有的车厢,再输入两个数字,在这串数字里面找出,顺序的这两个数字,只能从左往右查找;

思路

  1. 先找出起点和终点,先判断每个数在不在这个数组里面,在的话判断是不是顺序的

算法一:map函数

具体步骤

  1. map<int, int> l, r;: 创建两个映射,l 用于记录每个站台最早出现的位置,r 用于记录每个站台最晚出现的位置。
    2.if (!l[x]) l[x] = i;: 如果站台 x 还没有出现过,记录其最早出现的位置。
    3.r[x] = i;: 不断更新站台 x 的最晚出现位置。
    4.对于每个查询,通过检查 l[a] && l[b] && l[a] <= r[b] 来判断是否存在一条火车路线。如果条件满足,输出 “YES”,否则输出 “NO”。

这段代码通过记录每个站台的最早和最晚出现位置,有效地处理了每个查询,判断是否存在一条火车路线。

代码
#include <map>//映射要用
#include <stdio.h>
using namespace std; 
int t,n,k,x,a,b,i;
int main(){
        scanf("%d",&t);
        while(t--){
                map<int,int>l,r;//l表示最早一次,r表示最晚一次
                                                //不这样要clear(),反而麻烦,不如再申请一个
                scanf("%d %d",&n,&k);
                for(i=1;i<=n;++i){
                        scanf("%d",&x);
                        if(!l[x])//没见过
                                l[x]=i;//记录
                        r[x]=i;//不断更新
                }
                while(k--){
                        scanf("%d %d",&a,&b);
                        if(l[a]&&l[b]&&l[a]<=r[b])//都出现过且ai最早一次比bi最晚一次早,就可以
                                puts("YES");
                        else
                                puts("NO");//反之,不行
                }
        }
        return 0;
}
 
 
`train` 函数是用来训练模型的函数,其主要作用是利用给定的训练数据,对模型进行优化调整,使得模型能够更好地拟合训练数据,并在未知数据上具有更好的泛化性能。 一般来说,`train` 函数需要接收以下参数: - 训练数据:包括输入数据和对应的标签; - 模型:需要训练的模型; - 优化器:用来更新模型参数的优化器; - 损失函数:用来衡量模型在训练数据上的表现; - 训练轮数:指定训练的轮数; - 批次大小:每次迭代使用的数据批次大小; - 学习率:用来控制模型参数更新的步长; - 设备:指定模型运行的设备,例如 CPU 或 GPU。 下面是一个示例代码,展示了如何使用 PyTorch 实现 `train` 函数: ```python def train(model, optimizer, criterion, train_loader, num_epochs, device): model.train() for epoch in range(num_epochs): running_loss = 0.0 for inputs, labels in train_loader: inputs, labels = inputs.to(device), labels.to(device) optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() print('Epoch [{}/{}], Loss: {:.4f}' .format(epoch+1, num_epochs, running_loss/len(train_loader))) ``` 在这个示例代码中,`train` 函数接收以下参数: - `model`:需要训练的模型; - `optimizer`:用来更新模型参数的优化器; - `criterion`:用来衡量模型在训练数据上的表现; - `train_loader`:训练数据加载器,用来加载训练数据; - `num_epochs`:训练轮数; - `device`:指定模型运行的设备。 在函数内部,我们首先将模型设置为训练模式,然后迭代指定的训练轮数。对于每一轮训练,我们使用训练数据加载器加载数据,并将其移动到指定的设备上。然后,我们将优化器的梯度设置为零,对模型进行前向传播并计算损失,然后反向传播误差并更新模型参数。最后,我们计算当前轮次的平均损失并打印输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值