一个很大很大的小问题
  • 板块学术版
  • 楼主lonely_dog
  • 当前回复15
  • 已保存回复15
  • 发布时间2022/8/17 13:47
  • 上次更新2023/10/27 14:59:23
查看原帖
一个很大很大的小问题
774537
lonely_dog楼主2022/8/17 13:47

输入一个包含N 个正整数的数组,求出这个数组中包含的最长的回文数组是什么, 如果有相同长度的最长回文数,输出最靠前的一个。

输入格式 第一行1 个正整数:N,N的范围在[1,1000]。

第二行 N 个不同的正整数:范围在[1,10000]。

输出格式 多个正整数, 表示数组中最长的回文数组。

输入/输出例子1 输入:

9

2 6 1 9 7 9 1 5 3

输出:

1 9 7 9 1

#include<bits/stdc++.h>
using namespace std;
int a[1234567];
int main(){
    int b[5],bb[5];
    int n,max=0,maxid;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=2;i<n;i++)
    {
        if(a[i]==a[i-1])
        {
            b[1]=2;
            for(int j=i-2,k=i+1;a[j]==a[k];j--,k++)
            {
                b[1]+=2;
                bb[1]=j;
            }
        }
        if(a[i]==a[i+1])
        {
            b[2]=2;
            for(int j=i-1,k=i+2;a[j]==a[k];j--,k++)
            {
                b[2]+=2;
                bb[2]=j;
            }
        }
        if(a[i-1]==a[i+1])
        {
            b[3]=3;
            for(int j=i-2,k=i+2;a[j]==a[k];j--,k++)
            {
                b[3]+=2;
                bb[3]=j;
            }
        }
        for(int j=1;j<3;j++)
        {
            if(b[j]>=b[j+1])
            {
                swap(b[j],b[j+1]);
                swap(bb[j],bb[j+1]);
            }
        }
        if(b[3]>max)
        {
        	max=b[3];
        	maxid=bb[3];
        }
    }
    if(b[3]==0) {cout<<a[1];}
    else {
        for(int i=maxid;i<max+maxid;i++) 
        cout<<a[i]<<" ";
    }
    return 0;
}
2022/8/17 13:47
加载中...