This commit is contained in:
Zengtudor 2024-08-03 08:53:34 +08:00
parent 1f0738cd58
commit 976ebb2b03
7 changed files with 255 additions and 74 deletions

16
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,16 @@
{
// 使 IntelliSense
//
// 访: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/<executable file>",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}

View File

@ -1,72 +0,0 @@
# 区间最值求和
## 题目描述
给一个长度 $n$ 的序列 $a$,求:
$$
\sum_{l=1}^n\sum_{r=l}^n max(a[l...r])
$$
## 输入格式
第一行1个整数 $n$
第二行 $n$ 个整数 $a[1,2,...,n]$
## 输出格式
输出1个整数代表答案
## 样例 #1
### 样例输入 #1
```
4
2 1 3 4
```
### 样例输出 #1
```
30
```
## 样例 #2
### 样例输入 #2
```
5
4 5 7 2 4
```
### 样例输出 #2
```
87
```
## 样例 #3
### 样例输入 #3
```
见下发样例
```
### 样例输出 #3
```
见下发样例
```
## 提示
对于所有数据,$1\le n,a[i]\le 10^6$
subtask1(20pts)$n \le 5000$
subtask2(20pts)$a[i]\le 50$
subtask4(60pts):无特殊限制

34
day2/U111091/U111091.cpp Normal file
View File

@ -0,0 +1,34 @@
#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 main(){
cin.sync_with_stdio(false);
cin.tie(0);
cin>>times;
for(int t=1;t<=times;t++){
cin>>n>>k>>m;
for (int i=1; i<=n; i++) {
cin>>x[i];
}
string s;
cin>>s;
assert(s.size()==n-1);
for(int i=0;i<=s.size();i++){
if (s[i]=='0') {
l[i+1]=0;
}else {
l[i+1]=1;
}
}
}
}

107
day2/U111091/U111091.md Normal file
View File

@ -0,0 +1,107 @@
# 区间2段覆盖
## 题目描述
有 $n$ 个村庄坐落在数轴上,坐标为 $x[1...n]$。村庄之间有 $n-1$ 条道路,其中有些道路是土路,有些是高速公路。具体地,第 $i$ 个村庄和第 $i+1$ 个村庄之间只有一条道路,要么是土路、要么是高速公路,并且输入会告诉所有 $n-1$ 条道路的种类。
现在有 $k(k\le 2)$ 个铺路计划,每个铺路计划可以在数轴上 **任意选择一段长度$\le m$** 的区间 $[l,r]$,将其中间全部变成高速公路。注意区间端点可以任意选择,可以选在村庄处、村庄之间,甚至可以是小数。
请问该如何铺路,使得从 $x[1]$ 走到 $x[n]$ 路径上的土路总长度最小。
## 输入格式
第一行1个整数 $T$,代表有 $T$ 组数据
每组数据第一行 3 个整数 $n,k,m$
第二行 $n$ 个整数 $x[1,2,...,n]$,保证 $x[1]=0, x[i-1]\le x[i]$
第三行 1 个长度 $n-1$ 的 `01`字符串,代表 $n-1$ 条路的种类,`0` 代表高速公路,`1` 代表土路。
## 输出格式
输出 $T$ 行对于每组数据输出1个整数代表答案
## 样例 #1
### 样例输入 #1
```
5
3 2 13
0 6 80
11
7 2 11
0 50 80 83 86 97 97
111011
2 2 43
0 83
1
9 2 47
0 26 34 40 71 75 79 98 99
11111101
10 2 36
0 14 28 29 30 37 55 64 65 81
011101000
```
### 样例输出 #1
```
54
72
0
1
0
```
## 样例 #2
### 样例输入 #2
```
2
5 2 3
0 1 2 3 5
1011
4 2 3
0 1 5 6
111
```
### 样例输出 #2
```
0
0
```
## 样例 #3
### 样例输入 #3
```
见下发样例
```
### 样例输出 #3
```
```
## 提示
对于100%的数据,$1\le n\le 50000, 0\le m,x[i]\le 10^9,1\le T\le 100$
subtask1(20pts)$n\le 500m,x[i]\le 10^5k=1$
subtask2(20pts)$n\le 500m,x[i]\le 10^5k=2$
subtask3(20pts)$n\le 50000m,x[i]\le 10^9k=1$
subtask4(40pts)$n\le 50000m,x[i]\le 10^9k=2$
**【注意】请使用快速的读入方式**

BIN
day2/U458258/U458258 Executable file

Binary file not shown.

View File

@ -1,11 +1,47 @@
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MOD = 1e9+7;
const int MAX_N = 1e5+5;
int a[MAX_N];
int prefix_a[MAX_N];
int times;
int n;
signed main(){
cin.sync_with_stdio(false);
cin.tie(0);
int main(){
cin>>times;
for (int i=1; i<=times; i++) {
for (int t=1; t<=times; t++) {
int cnt = 0;
prefix_a[0] = 0;
cin>>n;
for (int i=1; i<=n; i++) {
cin>>a[i];
prefix_a[i] = (a[i]+prefix_a[i-1])%MOD;
}
/*
cout<<"\nprefix_a:\n";
for (int i=1; i<=n; i++) {
cout<<prefix_a[i]<<" ";
}
cout<<"\n";
*/
for (int l=1; l<=n; l++) {
for (int r=l; r<=n; r++) {
cnt=(
(
(prefix_a[r]-prefix_a[l-1])
/
(r-l+1)
)
+cnt
)%MOD;
}
}
cout<<cnt<<"\n";
}
}

60
day2/U458258/U458258.md Normal file
View File

@ -0,0 +1,60 @@
# 平均数之和
## 题目描述
对于一个长度为 $n$ 的数组,有 $\frac{n \times (n + 1)}{2}$ 个连续子区间。对于子区间 $a[l\sim r]$,其平均值为
$$
\frac{a[l]+...+a[r]}{r-l+1}
$$
求数组的所有子区间的平均数之和,对 $P=10^9+7$ 取模。
* 模意义下的除法:如果需要计算 $a/b \pmod P$,可以使用 $a\times b^{P-2} \pmod P$ 实现
## 输入格式
第一行1个整数 $t$,代表数据组数
每组数据第1行一个正整数 $n$,表示数组长度
每组数据第2行 $n$ 个正整数 $a[1\sim n]$
## 输出格式
输出 $t$ 行每行1个整数代表答案
## 样例 #1
### 样例输入 #1
```
5
7
1 4 3 9 3 6 10
4
4 9 2 9
4
9 9 1 7
6
8 9 1 6 5 7
10
5 6 10 5 7 9 2 4 3 2
```
### 样例输出 #1
```
792857292
166666727
500000066
633333457
564286026
```
## 提示
对于 30% 的测试点,$1 \leq n \leq 100$
对于 70% 的测试点,$1 \leq n \leq 5000$
对于 100% 的测试点,$1\le t\le 10, 1 \leq n \leq 10^5, 1 \leq a[i] \leq 100$