NC25578. Black & White
描述
输入描述
* 第一行一个整数 T ,表示接下来有 T 个样例。
* 首先输入n,m,表示S串的长度n和操作次数m,其中,
;
* 接下来输入一个长度为n的字符串S。
输出描述
一个整数,表示题面上描述的最大价值。
示例1
输入:
2 5 1 00101 2 1 01
输出:
4 2
说明:
第一个串翻转第三个位置,00001的价值为4;第二个串翻转第一个位置,11的价值为2。C++(clang++ 11.0.1) 解法, 执行用时: 236ms, 内存消耗: 620K, 提交时间: 2022-09-12 21:19:12
#include <bits/stdc++.h> using namespace std; int t; int main() { cin>>t; while(t--) { string ch; int len,d,ans=0; cin>>len>>d>>ch; for(int i=0;i<len;i++) { int t=ch[i]-'0',dd=d,sum=0; for(int j=i;j<len;j++) { if(ch[j]-'0'!=t) { if(dd){dd--; } else{break; } } sum++; } ans=max(ans,sum); } cout<<ans<<endl; } }
C++14(g++5.4) 解法, 执行用时: 115ms, 内存消耗: 2404K, 提交时间: 2019-05-05 14:26:36
#include<bits/stdc++.h> using namespace std; string s; int n,m; int solve(char c){ int cnt=0,res=0; for(int i=0,j=0;i<n;i++){ if(s[i]==c) cnt++; while(cnt>m) cnt-=s[j++]==c; res=max(res,i-j+1); } return res; } int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); cin>>s; printf("%d\n",max(solve('1'),solve('0'))); } }