珠子什么的最讨厌了。。

来源:互联网 发布:linux多线程服务通信 编辑:程序博客网 时间:2024/04/29 19:14

珠子

Time Limit 1000ms

Memory Limit 65536K

description

小林有一串珠子,是由很多个大小不同的珠子串联在一起组成的圆环型的,且其中每个珠子的大小可以用int型的整数来表示。小林有一个爱好就是数珠子,他想数那些位置相邻而且大小只相差1的珠子组成单调递增或单调递减的最长串是多长,比如说现在他有5个珠子,大小分别为2 3 4 9 22,那么这串珠子最长的符合要求的串的长度为3,而如果是 3 4 3 9 22 这个的话那么最长的有两条,3 4 和 4 3,但是长度相同答案为2。

input

数据有多个样例,每个样例的第一行给出一个n(0< n < 10),代表这串珠子的总长度(珠子是圆环型的首尾相连的),接着第二行给出n个数字,代表这n个珠子的大小。

output

请输出这串珠子中最长的符合要求的子串的长度

sample_input

52 3 4 9 2253 4 9 22 253 4 3 9 22

sample_output

3 32

hint

source





点击打开链接





#include <cstdlib>#include <iostream>using namespace std;int main(int argc, char *argv[]){    int n,f=-10,l=1,tl=1,f1=-10,l1=1,tl1=1;        while(~scanf("%d",&n))    {      int a[n];                            for(int i=0;i<n;i++)      {        scanf("%d",&a[i]);      }                                                                for(int j=0;j<2*n;j++)                                             {               int i;               i=j%n;               if(a[i]-f==1)               {l++;f=a[i];}               else                {if(l>tl)tl=l;l=1;}        f=a[i];         }        for(int j=0;j<2*n;j++)       {                 int i;                 i=j%n;                 if(a[i]-f1==-1)                 {l1++;f1=a[i];}                 else                  {if(l1>tl1)tl1=l1;l1=1;}        f1=a[i];         }       printf("%d\n",tl>tl1?tl:tl1);        l=1; tl=1;f=-10; l1=1; tl1=1;f1=-10;                   }    system("PAUSE");    return EXIT_SUCCESS;}

主要的实现部分是


       for(int j=0;j<2*n;j++)                                             {               int i;               i=j%n;               if(a[i]-f==1)               {l++;f=a[i];}               else                {if(l>tl)tl=l;l=1;}        f=a[i];         }






这题主要要解决末尾要与开头相连的问题,



把题中说得那串珠子a【n】变成b【2*n】

其中b【0<n】就是a【n】,b【n<2*n】也是a【n】

其实就是2个a连在一起,

这样就解决了题中要用到的“环形数组“的问题,

当然,这个题要求的是最大串的长度,最大就是n,所以可以这样求。

这个做法就好像是做了一条”辅助线“

代码是控制循环次数,在a【】上跑了2遍,

数组中的每一个元素与前一个相比,只要符合增加1的条件,长度就l++;一旦不符合了,马上记录l并与前一次l比较,大的留下,小的被覆盖

l变成1,准备下一次的计数,最后最大的l就留下来了。

原创粉丝点击