我是靠谱客的博主 怕黑高山,最近开发中收集的这篇文章主要介绍C++题解:蜗牛旅行,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        目录

题目 

题解


题目 

  •  1000ms
  •  524288K

蜗牛在制定今天的旅游计划,有 nn 个景点可选,它已经把这些景点按照顺路游览的顺序排成一排了,每个地方有相应的景观,这里用一个整数表示。

蜗牛希望选取连续的一段景点,还要选出来的每一个景点的景观都不同,问它最多能选出多少个景点进行旅游。

输入格式

第一行,一个正整数 n(1≤n≤10^5)。

第二行,包含 n 个正整数 ai​(1≤ai​≤10^6) ,第 i 个整数表示第 i 个景点的景观。

输出格式

输出一行,包含一个整数,表示蜗牛最多能选出的景点数。

数据范围

对于 60% 的数据,1≤n≤10^3

对于 100% 的数据,1≤n≤10^5,1≤ai​≤10^6

输出时每行末尾的多余空格,不影响答案正确性

要求使用「文件输入输出」的方式解题,输入文件为 tour.in,输出文件为 tour.out

样例输入

5
1 2 3 2 1

样例输出

3

题解:

知识点:队列

分析: 模拟一遍即可,注意细节

代码:

#include<iostream>
#include<cstdio>
#include<queue>
#include<map>
using namespace std;
const int N=1e6+5;
queue<int> q;
map<int,int> a;//用map节省空间
bool vis[N];
int main(){
    freopen("tour.in","r",stdin);
    freopen("tour.out","w",stdout);
    int n,ans=0;
    scanf("%d",&n);
    for (int i=0;i<n;i++){
        int a1;
        scanf("%d",&a1);
        a[i]=a1;
    }
    for (int i=0;i<n;i++){
        if (!vis[a[i]]){
            q.push(a[i]);
            vis[a[i]]=true;
        }else{
            while (!q.empty()){
                if (q.front()!=a[i]){
                    vis[q.front()]=false;
                    q.pop();
                }else{
                    q.pop();
                    vis[q.front()]=false;
                    q.push(a[i]);
                    break;
                }
            }
        }
        if (q.size()>ans){//注意,不能用max
            ans=q.size();
        }
    }
    cout<<ans<<endl;
    return 0;
}

最后

以上就是怕黑高山为你收集整理的C++题解:蜗牛旅行的全部内容,希望文章能够帮你解决C++题解:蜗牛旅行所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部