zzuli 1895 985的0-1串难题

来源:互联网 发布:小黄鸭淘宝软件 编辑:程序博客网 时间:2024/04/29 11:48

Description

985有一个长度为n的0-1串,已知他最多可以修改k次(每次修改一个字符即0->1 或者 1->0),他想知道连续的全1子串最长是多少。

Input

第一行输入一个整数t,代表有t组测试数据。
每组数据第一行输入两个整数n,k分别代笔上面的信息。
注:1 <= t <= 12,1 <= n <= 100000,0 <= k <= 100000。

Output

一个整数代表可以得到的最大长度。

Sample Input

26 30101006 2010100

Sample Output

54

我直接排查尽可能多的0之间最大长度。超时了。。

#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <stack>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;#define LL long long#define N 200005#define mod 1000000007int dp[N];int main(){   int t,n,nu,k;   scanf("%d",&t);   while(t--)   {      int t=0,ans=0;      memset(dp,0,sizeof(dp));      scanf("%d%d",&n,&k);      for(int i=1;i<=n;i++)      {          scanf("%1d",&dp[i]);      }      dp[0]=dp[n+1]=0;      for(int i=1;i<=n+1;i++)      {//printf("i=%d ",i);          if(!dp[i])          {              int s=0,j;              for(j=i-1;j>0;j--)              {//printf("j=%d ",j);                  if(!dp[j]) s++;                  if(s==k+1) break;              }              ans=max(ans,i-j-1);          }        //printf("\n");      }      printf("%d\n",ans);   }   return 0;}
修改后:

#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <stack>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;#define LL long long#define N 200005#define mod 1000000007int dp[N];int main(){   int t,n,nu,k;   scanf("%d",&t);   while(t--)   {      int con=1,ans=0;      memset(dp,0,sizeof(dp));      scanf("%d%d",&n,&k);      for(int i=1;i<=n;i++)      {          scanf("%1d",&nu);          if(nu==0) dp[con++]=i;      }      dp[0]=0,dp[con]=n+1;      if(con<=k)      {          printf("%d\n",n); continue;      }      for(int i=k;i<=con;i++)      {//printf("dp[%d]=%d  dp[%d]=%d\n",i,dp[i],i-k,dp[i-k]);        ans=max(ans,dp[i]-dp[i-k-1]-1);        //printf("\n");      }      printf("%d\n",ans);   }   return 0;}



0 0
原创粉丝点击