问题标题: 酷町堂:6585

0
0
已解决
被禁言 张皓轩
张皓轩
中级光能
中级光能

有一个数组A,数组元素只有0和1,我们最多可以将K个值从0变成1.请你输出仅包含1的最长(连续)数组的长度。

80分超时代码:

#include<iostream>

#include<cstdio>

#pragma GCC optimize(3)

using namespace std;

int a[10000001],l,k,cnt,p=1,ans,maxn;

int main(){

cin>>l>>k;

for(int i=1;i<=l;i++){

scanf("%d",&a[i]);

}

while(true){

int t=p;

while(p<=l && (a[p]==1 || cnt<k)){

if(a[p]!=1){

cnt++;

}

ans++;

p++;

}

if(p>l){

break;

}

cnt=0;

maxn=max(maxn,ans);

ans=0;

p=t+1;

}

cout<<maxn;

}

求大佬指点


1
已采纳
王文博
王文博
缔造者之神
缔造者之神
int a[4];
    cin>>a[1]>>a[2]>>a[3];
    sort(a+1,a+4);
    cout<<a[1]/f1(a[1],a[3])<<"/"<<a[3]/f1(a[1],a[3]);

f1就是辗转相除法的那个函数(=gcd),应该都懂

望采纳!

王文博在2021-08-07 18:07:46追加了内容

看错题了!抱歉

王文博在2021-08-07 18:08:53追加了内容

思路:回溯,尝试将每个0变成1,一旦将k个0变成1,或者到达字符串的结尾,就开始统计连续的1的子数组的最大长度。

1
我要回答