This commit is contained in:
Zengtudor 2024-08-03 11:19:23 +08:00
parent 5712b907f5
commit ca34cd3498
8 changed files with 128 additions and 110 deletions

2
.gitignore vendored
View File

@ -1,7 +1,9 @@
*.
# ---> C++
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo

Binary file not shown.

View File

@ -1,27 +0,0 @@
#include <algorithm>
#include<bits/stdc++.h>
#include <iostream>
#include <ostream>
const int MAX_N{1000'000};
int n;
int a[MAX_N];
unsigned cnt{0};
int main(){
std::cin.sync_with_stdio(false);
std::cin.tie(0);
std::cin>>n;
for(unsigned i=0;i<n;i++){
std::cin>>a[i];
}
for(unsigned l{0};l<n;l++){
int max_num = INT_MIN;
for (unsigned r{l};r<n;r++) {
max_num = std::max(a[r],max_num);
cnt+=max_num;
}
}
std::cout<<cnt<<"\n";
}

Binary file not shown.

View File

@ -1,81 +0,0 @@
#include<bits/stdc++.h>
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:"<<max_dir<<"\n";
for (int i=max_dir+1; i<=max_dir+m; i++) {
r[i]=0;
}
int cnt=0;
for (int i=1; i<=max_house; i++) {
cnt+=r[i];
}
//RM
// cout<<"\ncnt:"<<cnt<<"\n";
cout<<cnt<<"\n";
}
//RM
// cout<<"\nNEXT------------\n"<<endl;
/*
cout<<"\nl:\n";
for(int i=1;i<=n;i++){
cout<<l[i]<<",";
}
cout<<"\n";
*/
}
}

110
day2/U232520/U232520.md Normal file
View File

@ -0,0 +1,110 @@
# 黑色矩形
## 题目描述
一个 $n\times n$ 的黑白网格。定义黑色矩形为:
- 矩形由至少2个格子构成且构成矩形的格子都为黑色
现在你要选择2个不重叠没有公共格子的黑色矩形问有多少种方案`1e4+7` 取模。2种方案不同当且仅当选择的黑色矩形集合不同。
![](https://cdn.luogu.com.cn/upload/image_hosting/h7lgmovq.png)
左图是2个不是黑色举行的例子右图是3个是黑色矩形的例子。
参见样例1解释。
## 输入格式
第一行1个整数 $n$
接下来 $n$ 行每行1个长度为 $n$ 的01串$1$ 代表黑色,$0$ 代表白色。
## 输出格式
输出1个整数代表答案`1e4+7` 取模。
## 样例 #1
### 样例输入 #1
```
2
11
11
```
### 样例输出 #1
```
2
```
## 样例 #2
### 样例输入 #2
```
3
110
110
100
```
### 样例输出 #2
```
5
```
## 样例 #3
### 样例输入 #3
```
5
01100
00100
01100
00000
11000
```
### 样例输出 #3
```
8
```
## 样例 #4
### 样例输入 #4
```
见下发文件
```
### 样例输出 #4
```
见下发文件
```
## 提示
#### 样例1解释
共两种方案选择第1行和第2行或者选择第1列和第2列
#### 数据范围
对于所有数据,$1\le n \le 1500$
subtask1(20pts)$n\le 10$
subtask2(20pts)$n\le 50$
subtask3(20pts)$n\le 500$
subtask4(10pts):网格中全部为黑色
subtask5(30pts):无特殊限制

Binary file not shown.

View File

@ -1,6 +1,20 @@
#include <bits/stdc++.h>
using namespace std;
#define int long long
int main(){
const int MAX_HW=1e9+5;
int h,w,q1,q2;
signed main(){
cin>>h>>w>>q1>>q2;
int grid[h][w];
for(int i=1;i<=q1;i++){
int r1,r2,c1,c2,x;
cin>>r1>>r2>>c1>>c2;
}
for (int i=1 ;i<=q2;i++) {
int r1,r2,c1,c2;
cin>>r1>>r2>>c1>>c2;
}
}