bdfz_2024_summer/day2/U111091/U111091.cpp

113 lines
2.5 KiB
C++
Raw Normal View History

2024-08-03 00:53:34 +00:00
#include<bits/stdc++.h>
using namespace std;
2024-08-03 02:34:27 +00:00
#define int long long
2024-08-03 00:53:34 +00:00
const int MAX_N = 5'0000+5;
int times;
2024-08-03 02:34:27 +00:00
2024-08-03 00:53:34 +00:00
int x[MAX_N];
int l[MAX_N];
2024-08-03 02:34:27 +00:00
int prefix_r[MAX_N];
int r[MAX_N];
2024-08-03 02:43:46 +00:00
// void debug_array(int array[],size_t size,string name){
// cout<<"\n"<<name<<" [";
// for(int i=0;i<size;i++){
// cout<<array[i]<<(i!=size-1?",":"");
// }
// cout<<"]\n";
// }
2024-08-03 00:53:34 +00:00
2024-08-03 02:34:27 +00:00
signed main(){
2024-08-03 00:53:34 +00:00
cin.sync_with_stdio(false);
cin.tie(0);
cin>>times;
for(int t=1;t<=times;t++){
2024-08-03 02:34:27 +00:00
int max_house = INT_MIN;
prefix_r[0]=0;
int n,k,m;
2024-08-03 00:53:34 +00:00
cin>>n>>k>>m;
for (int i=1; i<=n; i++) {
cin>>x[i];
2024-08-03 02:34:27 +00:00
if (max_house<=x[i])max_house=x[i];
2024-08-03 00:53:34 +00:00
}
2024-08-03 02:43:46 +00:00
// cout<<"\nx[n]:"<<x[n]<<"\n";
2024-08-03 02:34:27 +00:00
//RM
2024-08-03 02:43:46 +00:00
// cout<<"\nmaxhouse:"<<max_house<<"\n";
2024-08-03 02:34:27 +00:00
// max_house=x[n];
//RM
2024-08-03 02:43:46 +00:00
// debug_array(x+1, n, "x");
2024-08-03 02:34:27 +00:00
2024-08-03 00:53:34 +00:00
string s;
cin>>s;
2024-08-03 02:34:27 +00:00
//RM
2024-08-03 02:43:46 +00:00
// assert(s.size()==n-1);
for(int i=0;i<=max_house;i++){
r[i]=0;
}
2024-08-03 02:34:27 +00:00
for(int i=1;i<=s.size();i++){
if (s[i-1]=='1') {
l[i]=1;
for (int j=x[i]+1; j<=x[i+1]; j++) {
r[j]=l[i];
}
2024-08-03 00:53:34 +00:00
}else {
2024-08-03 02:34:27 +00:00
l[i]=0;
2024-08-03 00:53:34 +00:00
}
}
2024-08-03 02:34:27 +00:00
int cnt=0;
for (int j=1; j<=k; j++) {
//RM
2024-08-03 02:43:46 +00:00
// cout<<"\nk:"<<j<<"\n";
// debug_array(r, max_house, "r");
2024-08-03 02:34:27 +00:00
for(int i=1;i<=max_house;i++){
prefix_r[i]=prefix_r[i-1]+r[i];
}
//RM
2024-08-03 02:43:46 +00:00
// debug_array(prefix_r, max_house, "prefix_r");
2024-08-03 02:34:27 +00:00
int max_dir=INT_MIN;
int max_num=INT_MIN;
for (int i=0; i<=max_house-m; i++) {
if (prefix_r[i+m]-prefix_r[i]>max_num) {
max_dir=i;
max_num=prefix_r[i+m]-prefix_r[i];
}
}
//RM
2024-08-03 02:43:46 +00:00
// debug_array(prefix_r, max_house, "prefix_r");
2024-08-03 02:34:27 +00:00
//RM
2024-08-03 02:43:46 +00:00
// cout<<"\nMAX_DIR:"<<max_dir<<"\n";
2024-08-03 02:34:27 +00:00
for (int i=max_dir+1; i<=max_dir+m; i++) {
r[i]=0;
}
cnt=0;
for (int i=1; i<=max_house; i++) {
cnt+=r[i];
}
//RM
2024-08-03 02:43:46 +00:00
// cout<<"\ncnt:"<<cnt<<"\n";
2024-08-03 02:34:27 +00:00
}
cout<<cnt<<"\n";
//RM
2024-08-03 02:43:46 +00:00
// cout<<"\nNEXT------------\n"<<endl;
2024-08-03 02:34:27 +00:00
/*
cout<<"\nl:\n";
for(int i=1;i<=n;i++){
cout<<l[i]<<",";
}
cout<<"\n";
*/
2024-08-03 00:53:34 +00:00
2024-08-03 02:34:27 +00:00
2024-08-03 00:53:34 +00:00
}
}