update
This commit is contained in:
parent
e5d7d52bf5
commit
1f0738cd58
BIN
day1/P5686/P5686
Executable file
BIN
day1/P5686/P5686
Executable file
Binary file not shown.
73
day1/P5686/P5686.cpp
Normal file
73
day1/P5686/P5686.cpp
Normal file
@ -0,0 +1,73 @@
|
||||
#include <bits/stdc++.h>
|
||||
#define int long long
|
||||
|
||||
const int MAX_N = 5*100'000;
|
||||
const int MOD = 1'000'000'000 + 7;
|
||||
|
||||
int a[MAX_N],b[MAX_N];
|
||||
int prefix_a[MAX_N],prefix_b[MAX_N];
|
||||
int n;
|
||||
int cnt=0;
|
||||
|
||||
signed main(){
|
||||
std::cin.sync_with_stdio(false);
|
||||
std::cin.tie(0);
|
||||
|
||||
prefix_a[0]=0;
|
||||
prefix_b[0]=0;
|
||||
std::cin>>n;
|
||||
for (int i=1;i<=n;i++) {
|
||||
std::cin>>a[i];
|
||||
prefix_a[i] = (a[i] + prefix_a[i-1])%MOD;
|
||||
}
|
||||
for(int i=1;i<=n;i++){
|
||||
std::cin>>b[i];
|
||||
prefix_b[i] = (b[i] + prefix_b[i-1])%MOD;
|
||||
}
|
||||
for (int l=1; l<=n; l++) {
|
||||
for (int r=l;r<=n;r++) {
|
||||
// int sum_a = ;
|
||||
// int sum_b = ;
|
||||
cnt = (cnt + (((prefix_a[r]-prefix_a[l-1]+MOD)%MOD)*((prefix_b[r]-prefix_b[l-1]+MOD)%MOD)))%MOD;
|
||||
}
|
||||
}
|
||||
std::cout<<cnt<<"\n";
|
||||
}
|
||||
|
||||
// #include <iostream>
|
||||
// #include <vector>
|
||||
// using namespace std;
|
||||
|
||||
// const int MOD = 1e9 + 7;
|
||||
|
||||
// int main() {
|
||||
// int n;
|
||||
// cin >> n;
|
||||
// vector<int> a(n), b(n);
|
||||
|
||||
// for (int i = 0; i < n; ++i) {
|
||||
// cin >> a[i];
|
||||
// }
|
||||
// for (int i = 0; i < n; ++i) {
|
||||
// cin >> b[i];
|
||||
// }
|
||||
|
||||
// vector<long long> prefix_a(n + 1, 0), prefix_b(n + 1, 0);
|
||||
// for (int i = 1; i <= n; ++i) {
|
||||
// prefix_a[i] = (prefix_a[i - 1] + a[i - 1]) % MOD;
|
||||
// prefix_b[i] = (prefix_b[i - 1] + b[i - 1]) % MOD;
|
||||
// }
|
||||
|
||||
// long long result = 0;
|
||||
|
||||
// for (int l = 1; l <= n; ++l) {
|
||||
// for (int r = l; r <= n; ++ r) {
|
||||
// long long sum_a = (prefix_a[r] - prefix_a[l - 1] + MOD) % MOD;
|
||||
// long long sum_b = (prefix_b[r] - prefix_b[l - 1] + MOD) % MOD;
|
||||
// result = (result + sum_a * sum_b) % MOD;
|
||||
// }
|
||||
// }
|
||||
|
||||
// cout << result << endl;
|
||||
// return 0;
|
||||
// }
|
67
day1/P5686/P5686.md
Normal file
67
day1/P5686/P5686.md
Normal file
@ -0,0 +1,67 @@
|
||||
# [CSP-S2019 江西] 和积和
|
||||
|
||||
## 题目背景
|
||||
|
||||
JXCSP-S T2
|
||||
|
||||
## 题目描述
|
||||
|
||||
给定两个下标从 $1$ 到 $n$ 编号的序列 $a_i,b_i$,定义函数 $S(l,r)(1\le l\le r\le n)$ 为:
|
||||
|
||||
$$\sum_{i=l}^r a_i\times \sum_{i=l}^r b_i$$
|
||||
|
||||
请你求出下列式子的值:
|
||||
|
||||
$$\sum_{l=1}^n \sum_{r=l}^n S(l,r)$$
|
||||
|
||||
由于答案可能很大,你只需要给出答案模 $10^9+7$ 后的结果。
|
||||
|
||||
## 输入格式
|
||||
|
||||
第一行一个正整数 $n$ 表示序列长度。
|
||||
第二行 $n$ 个正整数表示 $a_i$。
|
||||
第三行 $n$ 个正整数表示 $b_i$。
|
||||
|
||||
## 输出格式
|
||||
|
||||
仅一行一个整数表示答案模 $10^9+7$ 后的结果。
|
||||
|
||||
## 样例 #1
|
||||
|
||||
### 样例输入 #1
|
||||
|
||||
```
|
||||
3
|
||||
2 3 4
|
||||
3 4 5
|
||||
```
|
||||
|
||||
### 样例输出 #1
|
||||
|
||||
```
|
||||
244
|
||||
```
|
||||
|
||||
## 样例 #2
|
||||
|
||||
### 样例输入 #2
|
||||
|
||||
```
|
||||
5
|
||||
11 22 33 44 55
|
||||
12 34 56 78 90
|
||||
```
|
||||
|
||||
### 样例输出 #2
|
||||
|
||||
```
|
||||
201542
|
||||
```
|
||||
|
||||
## 提示
|
||||
|
||||
【数据范围】
|
||||
对于 $20\%$ 的数据:$n\le 10$ , $a_i,b_i\le 10$;
|
||||
对于 $40\%$ 的数据:$n\le 200$ , $a_i,b_i\le 100$;
|
||||
对于 $70\%$ 的数据:$n\le 3000$ , $a_i,b_i\le 10^5$;
|
||||
对于 $100\%$ 的数据:$3\le n\le 5\times 10^5$ , $1\le a_i,b_i\le 10^9$。
|
72
day1/PreSim/总结.md
Normal file
72
day1/PreSim/总结.md
Normal file
@ -0,0 +1,72 @@
|
||||
# 区间最值求和
|
||||
|
||||
## 题目描述
|
||||
|
||||
给一个长度 $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):无特殊限制
|
BIN
day1/U234197/U234197
Executable file
BIN
day1/U234197/U234197
Executable file
Binary file not shown.
27
day1/U234197/U234197.cpp
Normal file
27
day1/U234197/U234197.cpp
Normal file
@ -0,0 +1,27 @@
|
||||
#include <algorithm>
|
||||
#include<bits/stdc++.h>
|
||||
#include <iostream>
|
||||
#include <ostream>
|
||||
|
||||
const int MAX_N{1000'000};
|
||||
int n;
|
||||
int a[MAX_N];
|
||||
int 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";
|
||||
}
|
24
day1/U234197/U234197.md
Normal file
24
day1/U234197/U234197.md
Normal file
@ -0,0 +1,24 @@
|
||||
当然,我可以帮你解释这一段 LaTeX 代码:
|
||||
|
||||
\[
|
||||
\sum_{l=1}^n\sum_{r=l}^n \max(a[l...r])
|
||||
\]
|
||||
|
||||
这是一个嵌套求和表达式,分为以下几部分:
|
||||
|
||||
1. **外层求和** \(\sum_{l=1}^n\):表示对 \(l\) 从 1 到 \(n\) 进行求和。
|
||||
2. **内层求和** \(\sum_{r=l}^n\):在每个固定的 \(l\) 值下,表示对 \(r\) 从 \(l\) 到 \(n\) 进行求和。
|
||||
3. **最大值函数** \(\max(a[l...r])\):表示在数组 \(a\) 的子数组 \(a[l] \) 到 \(a[r]\) 之间取最大值。
|
||||
|
||||
组合在一起,这个表达式的意思是:
|
||||
|
||||
对于数组 \(a\) 中的所有可能的子数组 \(a[l...r]\)(其中 \(1 \leq l \leq r \leq n\)),求这些子数组的最大值的和。
|
||||
|
||||
逐步解释如下:
|
||||
|
||||
1. 选定左端点 \(l\) 从 1 到 \(n\)。
|
||||
2. 对于每个 \(l\),选定右端点 \(r\) 从 \(l\) 到 \(n\)。
|
||||
3. 计算子数组 \(a[l] \) 到 \(a[r]\) 的最大值。
|
||||
4. 将所有这些最大值相加。
|
||||
|
||||
总的来说,这个表达式代表的是将所有可能的子数组的最大值进行累加的结果。
|
BIN
day1/U234197/tempCodeRunnerFile
Executable file
BIN
day1/U234197/tempCodeRunnerFile
Executable file
Binary file not shown.
27
day1/U234197/tempCodeRunnerFile.cpp
Normal file
27
day1/U234197/tempCodeRunnerFile.cpp
Normal file
@ -0,0 +1,27 @@
|
||||
#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";
|
||||
}
|
BIN
day1/learn/test_cpp_io
Executable file
BIN
day1/learn/test_cpp_io
Executable file
Binary file not shown.
6
day1/learn/test_cpp_io.cpp
Normal file
6
day1/learn/test_cpp_io.cpp
Normal file
@ -0,0 +1,6 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
int main(){
|
||||
std::cin.sync_with_stdio(false);
|
||||
std::cin.tie(0);
|
||||
}
|
11
day2/U458258/U458258.cpp
Normal file
11
day2/U458258/U458258.cpp
Normal file
@ -0,0 +1,11 @@
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
|
||||
int times;
|
||||
|
||||
int main(){
|
||||
cin>>times;
|
||||
for (int i=1; i<=times; i++) {
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user