3.奢侈的河流旅行

news/2024/7/18 22:18:11 标签: 算法, 数据结构

题目描述

农夫约翰正带领着他的奶牛们去旅行。他们漂流在一个有N个港口的河流网络中,每个港口的标号分别是从1到N。开始的时候,他们在第一个港口,每个港口有且仅有两条可以开到其他港口的河流,并且河流的方向是单向的,船只能沿着河流的方向开。

在每一个港口,约翰可以选择向左边的河流或者向右边的河流开,约翰制定了一个长度为M的方向序列,序列中的字母或者是’L’或者是‘R’,‘L’表示向开向左边的港口,‘R’表示开向右边的港口。令人感觉奇怪的是,约翰执行这个长度为M的方向序列执行了K次。

问题描述:

请帮助约翰计算在执行了K次这种长度为M的序列之后,他最后在哪个港口。

输入


 

第一行三个整数,N,M和K。

接下来第2行到第N+1行,每行两个正整数,第i+1的两个整数表示第i个港口左边和右边的河流所去的其他港口的序号。

接下来一行,表示长度为M的方向序列,每个字母之间用空格隔开,字母只可能是‘L’或者‘R’。

输出

输出最后所在的港口的序号。

样例输入

4 3 3 
2 4 
3 1 
4 2 
1 3 
L L R

样例输出

4

提示

数据范围:

1<=N<=1000,1<=M<=500,1<=K<=1000000000。

样例说明:

样例中,第一次序列执行完是在港口2(1-2-3-2),第二次序列执行完是在港口3(2-3-4-3),第三次序列执行完是在港口4(3-4-1-4)。所以最后的位置是在港口4。

说明:

注意这是一个有向图。

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k,j,x,i,net[900010],f[900010];
char ch[900010];
struct no{
    int l,r;
}a[900010];
main(){
    cin>>n>>m>>k;
    for(i=1;i<=n;i++)
        cin>>a[i].l>>a[i].r;
    for(i=1;i<=m;i++)cin>>ch[i];
    for(i=1;i<=n;i++){
        x=i;
        for(j=1;j<=m;j++)
            if(ch[j]=='L')x=a[x].l;
            else x=a[x].r;
        net[i]=x;
    }
    for(i=2;i<=n;i++)f[i]=-1;x=1;f[1]=0;
    for(i=1;i<=n+1;i++){
        x=net[x];
        if(f[x]<0)f[x]=i;
        else{k=k-f[x];i=i-f[x];break;}
    }
    k=k%i;
    for(i=1;i<=k;i++)x=net[x];
    cout<<x;
}

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,k,j,x,i,net[900010],f[900010];
char ch[900010];
struct no{
    int l,r;
}a[900010];
main(){
    cin>>n>>m>>k;
    for(i=1;i<=n;i++)
        cin>>a[i].l>>a[i].r;
    for(i=1;i<=m;i++)cin>>ch[i];
    for(i=1;i<=n;i++){
        x=i;
        for(j=1;j<=m;j++)
            if(ch[j]=='L')x=a[x].l;
            else x=a[x].r;
        net[i]=x;
    }
    for(i=2;i<=n;i++)f[i]=-1;x=1;f[1]=0;
    for(i=1;i<=n+1;i++){
        x=net[x];
        if(f[x]<0)f[x]=i;
        else{k=k-f[x];i=i-f[x];break;}
    }
    k=k%i;
    for(i=1;i<=k;i++)x=net[x];
    cout<<x;
}


http://www.niftyadmin.cn/n/5544485.html

相关文章

对MVC的理解以及如何实现一个简单的MVC

IOC 容器与 Controller&#xff1a; 在 Spring 框架中&#xff0c;所有的 Controller 都会被 Spring 的 IOC 容器管理。当应用程序启动时&#xff0c;Spring 会扫描所有带有 Controller 注解的类&#xff0c;并将它们作为 Bean 注册到 IOC 容器中。 方法扫描与 Dispatcher&am…

FFmpeg 实现从摄像头获取流并通过RTMP推流

使用FFmpeg库实现从USB摄像头获取流并通过RTMP推流&#xff0c;FFmpeg版本为4.4.2-0。RTMP服务器使用的是SRS&#xff0c;拉流端使用VLC。如果想降低延时&#xff0c;首先需要配置SRS为Realtime模式&#xff0c;拉流的话就不要用VLC了&#xff0c;使用 ffplay 来拉流播放&#…

go-redis 封装事件-client封装模型、批量数据处理的导出器设计

一、redis-go的封装实践-client模型 // Copyright 2020 Lingfei Kong <colin404foxmail.com>. All rights reserved. // Use of this source code is governed by a MIT style // license that can be found in the LICENSE file.package storageimport ("context&q…

Python 爬虫 tiktok API接口获取tiktok用户关注列表

此接口可获取tiktok用户关注列表。若有需要&#xff0c;请点击文末链接联系我们。 详细采集页面如下https://www.tiktok.com/quanap_official 请求API http://api.xxxx.com/tt/user/following?user_id7252644648840381445&count10&offset0&tokentest 请求参数 返…

Django 靓号管理系统:表结构设计与初始化

在本文中,我们将介绍如何为一个靓号管理系统设计和初始化数据库表结构。这个系统包括部门、管理员和靓号三个主要实体。我们将使用 Django 的模型系统来定义这些表结构。 1. 项目初始化 首先,让我们创建一个新的 Django 项目和应用: django-admin startproject number cd…

可灵AI快速迭代:揭示中国AI技术的全球领先地位

最近&#xff0c;中国企业在AI技术上的快速迭代引起了广泛关注。以可灵AI为例&#xff0c;一个月内连续三次升级&#xff0c;推出了高清版和首尾帧控制等功能。这种高频率的技术更新&#xff0c;不仅显示了中国企业的拼劲&#xff0c;也对全球AI竞赛产生了深远影响。 中国企业的…

十一、作业

1.从大到小输出 写代码将三个整数数按从大到小输出。 void Swap(int* px, int* py) {int tmp *px;*px *py;*py tmp;} int main() {int a 0;int b 0;int c 0;scanf("%d %d %d", &a, &b, &c);int n 0;if (a<b){Swap(&a, &b);}if (a &l…

判断对象能否回收的两种方法,以及JVM引用

判断对象能否回收的两种方法&#xff1a;引用计数算法&#xff0c;可达性分析算法 引用计数算法&#xff1a;给对象添加一个引用计数器&#xff0c;当该对象被其它对象引用时计数加一&#xff0c;引用失效时计数减一&#xff0c;计数为0时&#xff0c;可以回收。 特点&#xf…