高级光能
经验值: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追加了内容
哇,验证码会更新也(上面的)
初级启示者
抱歉,你咋又换了个题目
不过我也会
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和换行