diff --git a/.vscode/launch.json b/.vscode/launch.json index 51c54c4..4cd01e5 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,7 +8,7 @@ "type": "lldb", "request": "launch", "name": "Debug", - "program": "${workspaceFolder}/", + "program": "${workspaceFolder}/?", "args": [], "cwd": "${workspaceFolder}" } diff --git a/day2/U111091/U111091 b/day2/U111091/U111091 new file mode 100755 index 0000000..930f3fc Binary files /dev/null and b/day2/U111091/U111091 differ diff --git a/day2/U111091/U111091.cpp b/day2/U111091/U111091.cpp index 5a4eeba..4e86f1e 100644 --- a/day2/U111091/U111091.cpp +++ b/day2/U111091/U111091.cpp @@ -1,34 +1,110 @@ #include using namespace std; +#define int long long const int MAX_N = 5'0000+5; int times; -int n,k,m; + int x[MAX_N]; int l[MAX_N]; +int prefix_r[MAX_N]; +int r[MAX_N]; + +void debug_array(int array[],size_t size,string name){ + cout<<"\n"<>times; for(int t=1;t<=times;t++){ + int max_house = INT_MIN; + prefix_r[0]=0; + int n,k,m; cin>>n>>k>>m; for (int i=1; i<=n; i++) { cin>>x[i]; + if (max_house<=x[i])max_house=x[i]; } + //RM + cout<<"\nmaxhouse:"<>s; + + //RM assert(s.size()==n-1); - for(int i=0;i<=s.size();i++){ - if (s[i]=='0') { - l[i+1]=0; + + 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]; + } }else { - l[i+1]=1; + l[i]=0; } } + int cnt=0; + for (int j=1; j<=k; j++) { + //RM + cout<<"\nk:"<max_num) { + max_dir=i; + max_num=prefix_r[i+m]-prefix_r[i]; + } + } + + //RM + debug_array(prefix_r, max_house, "prefix_r"); + + //RM + cout<<"\nMAX_DIR:"< +using namespace std; + +const int MAX_N = 5'0000+5; +int times; +int n,k,m; +int x[MAX_N]; +int l[MAX_N]; +int prefix_r[MAX_N]; +int r[MAX_N]; +int max_house = INT_MIN; + + +int main(){ + cin.sync_with_stdio(false); + cin.tie(0); + + cin>>times; + for(int t=1;t<=times;t++){ + max_house = INT_MIN; + prefix_r[0]=0; + cin>>n>>k>>m; + for (int i=1; i<=n; i++) { + cin>>x[i]; + if (max_house<=x[i])max_house=x[i]; + } + string s; + cin>>s; + assert(s.size()==n-1); + 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]; + } + }else { + l[i]=0; + } + } + for (int j=1; j<=k; j++) { + for(int i=1;i<=max_house;i++){ + prefix_r[i]=prefix_r[i-1]+r[i]; + } + int max_dir=INT_MIN; + int max_num=INT_MIN; + for (int i=1; 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 + // cout<<"\nMAX_DIR:"<