问题标题: 酷町堂:6585

0
0
已解决
汪艾辰
汪艾辰
高级光能
高级光能

经验值:2000 时间限制:1000毫秒 内存限制:128MB

题目描述 Description

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

输入描述 Input Description

输入有两行
第一行 两个整数 分别是数组A的长度L和k的值,中间用空格隔开
第二行 数组A中的L个元素,中间用空格隔开

输出描述 Output Description

输出一个整数,表示最大长度

样例输入 Sample Input

【输入样例1】: 11 2 1 1 1 0 0 0 1 1 1 1 0 【输入样例2】: 19 3 0 0 1 1 0 0 1 1 1 0 1 1 0 0 0 1 1 1 1

样例输出 Sample Output

【输出样例1】: 6 【输出样例2】: 10

数据范围及提示 Data Size & Hint

1 <= L <= 10000000
0 <= K <= L
A[i] 为 0 或 1

编程语言:

 

文件操作:

 

题目笔记

1

 

 

 

控制台

验证码

 

汪艾辰在2022-10-22 08:50:43追加了内容

4468

 

汪艾辰在2022-10-22 08:52:13追加了内容

 

 

#include<iostream>
using namespace std;
int n,m,k,q,s,fe,sum=480,p;
int t[105];
int ans[105];
int ck[15][105],f[15],l[15];
int main(){
    cin>>n>>m>>k>>q;
    for(int i=1;i<=k;i++){
        cin>>t[i];
    }
    int cnt=1;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            if(cnt>k) continue;
            f[j]=1;
            l[j]=i;
            ck[j][i]=cnt++;
        }
    }
    for(int i=1;i<=n;i++){
        if(f[i]<=l[i]){
            ans[ck[i][1]]=t[ck[i][1]];
        }
    }
    for(int i=0;i<540;i++){
        for(int j=1;j<=n;j++){
            if(ans[ck[j][f[j]]]==i){
                if(f[j]+1<=l[j]){
                    ans[ck[j][f[j]+1]]=ans[ck[j][f[j]]]+t[ck[j][f[j]+1]];
                }
                f[j]++;
                if(cnt>k){
                    continue;
                }
                l[j]++;
                ck[j][l[j]]=cnt++;
            }
        }
    }
    int cnt1=0;
    for(int i=1;i<=q;i++){
        cin>>p;
        sum+=ans[p];
        fe=sum%60,s=sum/60;
        if(s>=17||s==17&&fe!=0){
            break;
        }
        if(fe<10){
            cnt1++;
            cout<<s<<":0"<<fe<<"\n";
        }
        else{
            cout<<s<<":"<<fe<<"\n";
        }
    }
    for(int i=1;i<=k-cnt1;i++){
        cout<<"sorry\n";
    }
    return 0;
}

汪艾辰在2022-10-22 08:55:00追加了内容

哇,验证码会更新也(上面的)


0
已采纳
熊潇然
熊潇然
初级启示者
初级启示者

抱歉,你咋又换了个题目

不过我也会

while(q--)就行了,不用for

定义p,shi=8,fen=0

输入o

如果ans[o],shi+=ans[o]/60,fen+=ans[o]%60

    如果shi<10

        输出0

    输出shi和 :

    如果fen<10

        输出0

    输出fen和换行

否则输出sorry和换行

0
熊潇然
熊潇然
初级启示者
初级启示者

思路:

这里需要用到滑动窗口(你学了吗?)

可以将k个值变为0,就说明在连续1的中可以有最多k个0

 

望 采纳√

0
0
熊潇然
熊潇然
初级启示者
初级启示者

滑动窗口!!!

你这是啥呀?

我要回答