美丽的大树

来源:互联网 发布:统计学教材知乎 编辑:程序博客网 时间:2024/04/24 06:24

题目描述

【问题描述】
兴中道是中山最美丽的道路,路中间的绿化带上种了两列漂亮的大树,这些大树分成了50行,每行两棵大树,一共100棵大树,这些大树被编上了号,编号方式如下:
1 3 5 7 ………… 95 97 99
2 4 6 8 ………… 96 98 100
再过几天奥运火炬就要在中山传递了,美丽的兴中道当然是最重要的必经之路,但是某天晚上却发生了一件令人震惊的大事--可恶的破坏分子为了破坏奥运,让中山人民丢丑,竟然偷去了这100棵大树中的一部分!
公安部门马上出动,列出了被偷去了大树的编号。现在摆在我们面前的情况是,如果火炬的旁边是空空的树坑,那是令人无法接受的,因此我们只能压缩火炬在兴中道上的传递距离,务必使火炬在连续的大树边传递,当时,我们就得找出一列最长的连续的大树供传递火炬时展现在全世界的人面前。请你编写程序解决这一难题。

输入

【输入格式】
N (表示有N棵大树被盗)
N1 N2 N3……NN(被盗大树的编号)

输出

【输出格式】
M X (表示从第M棵大树开始,共有连续的X棵大树,如果有多个解,只输出一个解即可)

样例输入

59 15 27 35 6

样例输出

8 47
#include<iostream> using namespace std; void abc(int a[],int tree[],int N) {     for(int i=0;i<50;i++)         for(int j=0;j<N;j++)             if(a[i]==tree[j])                 a[i]=0; } void def(int a[],int &y,int &x,int &f) {     for(int i=0;i<51;i++)     {         if(a[i]!=0)             y++;         else        {             if(y>x)             {                 x=y;                 f=a[i-x];             }             y=0;         }     }  } int main() {     int N,tree[100],i,j=0,k=0,a[51]={0},b[51]={0};     int x=0,y=0,f;     cin>>N;     for(i=0;i<N;i++)         cin>>tree[i];     for(i=1;i<=100;i++)     {         if(i%2!=0)         {             a[j]=i;             j++;         }         else        {             b[k]=i;             k++;         }     }     abc(a,tree,N);     abc(b,tree,N);     def(a,y,x,f);     def(b,y,x,f);     cout<<f<<" "<<x<<endl;     return 0; } 


方法感觉不是很好
原创粉丝点击