uestc 1904 树上的鸟儿

来源:互联网 发布:java怎么调用函数 编辑:程序博客网 时间:2024/04/29 03:28

本题是要求最多的鸟的数量,不一定在最后;

所以先把满足题意的能配对的先确定下来;

然后要开始遍历查找最大,在便利是在时间段n中进行的,把这个时间段能配对的鸟的数量,和雄鸟没配对的数量(因为每到飞走的时间)就是这个时间段总时间;

#include"stdio.h"
#include"string.h"
int a[10006],b[10006];
char str[10006];
int main()
{
 int m,n,i,j,k,sum,max,h;
 scanf("%d",&k);
 while(k--)
 {
  scanf("%d%d",&m,&n);
  memset(b,0,sizeof(b));
  scanf("%s",str);
  for(i=0;i<m;i++)
   a[i]=str[i]-'0';
  for(i=0;i<m;i++)
  {
   if(a[i]==1)
   {
       for(j=i+1;j<=i+n&&j<m;j++)
    if(a[j]==2&&b[j]==0)
    {
     b[i]=1;
     b[j]=1;
     break;
    }
   }
  }
     sum=0;max=0;
  for(i=0;i<m;i++)
  { 
   h=0;
   if(b[i]==1)
    sum++;
   if(i-n<0)
    j=0;
   else
    j=i-n+1;
   for(;j<=i;j++)
   {
    if(a[j]==1&&b[j]==0)
     h++;
   }
   if(max<h+sum)
    max=h+sum;
  }
   printf("%d\n",max);
 }
 return 0;
}


        

0 0