Codeforces Round #209 (Div. 2) D - Pair of Numbers

題意:給你一個長度爲n的數列ai,然後找出最大的r-l,r代表右下標,l代表左下標,條件是l<=j<=r,al..ar都被aj整除。

思路:遍歷,使用left和right定位左右區間大小。

代碼如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define INF 0x3f3f3f3f
int a[300005],b[300005];
int main()
{
  int n;
  scanf("%d",&n);
  for(int i=1;i<=n;i++)
  {
    scanf("%d",&a[i]);
  }
  int length=0,num=0;
  for(int i=1;i<=n;)
  {
    int left=i,right=i;
    while(left>=1&&a[left]%a[i]==0)
    {
      left--;
    }
    while(right<=n&&a[right]%a[i]==0)
    {
      right++;
    }
    i=right;
    if(right-left-2>length)
      num=0,length=(right-left-2);
    if(right-left-2==length)
      b[num++]=left+1;
  }
  //sort(b,b+num);
  printf("%d %d\n",num,length);
  for(int i=0;i<num-1;i++)
  {
    printf("%d ",b[i]);
  }
  printf("%d\n",b[num-1]);
}


發佈了56 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章