diff options
Diffstat (limited to 'store/works/life/algorithm-contest-2')
35 files changed, 591 insertions, 0 deletions
diff --git a/store/works/life/algorithm-contest-2/README.md b/store/works/life/algorithm-contest-2/README.md new file mode 100644 index 0000000..ce3292d --- /dev/null +++ b/store/works/life/algorithm-contest-2/README.md @@ -0,0 +1,9 @@ +2020.10.25
+
+此文件夹包含第二届数计学院算法大赛相关的文件。
+
+- `solution`里是参考答案。
+- `generator`里是测试数据生成器。
+- `gen.ps1`和`pack.ps1`为生成测试数据用的便捷脚本。
+- `output.zip`为最终的测试数据。
+- `problems.pdf`为本次比赛的题目。
diff --git a/store/works/life/algorithm-contest-2/gen.ps1 b/store/works/life/algorithm-contest-2/gen.ps1 new file mode 100644 index 0000000..60b88b2 --- /dev/null +++ b/store/works/life/algorithm-contest-2/gen.ps1 @@ -0,0 +1,39 @@ +Push-Location solution
+
+foreach ($problem in 1..5) {
+ clang-cl "$problem.cpp" /O2 "-fsanitize=address,undefined"
+}
+
+Pop-Location
+
+Remove-Item -Recurse output
+
+mkdir .\output
+
+$time_output = @()
+
+foreach ($problem in 1..5) {
+ mkdir output/$problem
+ foreach ($genfile in Get-ChildItem "generator/$problem") {
+ if ($genfile.Name -match "(.+)\.in") {
+ $genfile_id = $Matches[1]
+ Copy-Item $genfile output/$problem
+ }
+ elseif ($genfile.Name -match "(.+)\.cpp") {
+ $genfile_id = $Matches[1]
+ Push-Location "generator/$problem"
+ clang-cl $genfile.Name /O2 "-fsanitize=address,undefined"
+ Pop-Location
+ & "./generator/$problem/$genfile_id.exe" > "./output/$problem/$genfile_id.in"
+ }
+ $time = (Measure-Command {
+ Get-Content "./output/$problem/$genfile_id.in" | & "./solution/$problem.exe" > "./output/$problem/$genfile_id.out"
+ }).TotalSeconds
+
+ $time_output += "Problem $problem test point $genfile_id time: $time s."
+ }
+}
+
+foreach ($line in $time_output) {
+ Write-Output $line
+}
diff --git a/store/works/life/algorithm-contest-2/generator/1/1.in b/store/works/life/algorithm-contest-2/generator/1/1.in new file mode 100644 index 0000000..38f8fd6 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/1/1.in @@ -0,0 +1 @@ +8 3
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/generator/1/2.in b/store/works/life/algorithm-contest-2/generator/1/2.in new file mode 100644 index 0000000..f4eea7b --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/1/2.in @@ -0,0 +1 @@ +4 4
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/generator/1/3.in b/store/works/life/algorithm-contest-2/generator/1/3.in new file mode 100644 index 0000000..11ab954 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/1/3.in @@ -0,0 +1 @@ +4 6
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/generator/1/4.in b/store/works/life/algorithm-contest-2/generator/1/4.in new file mode 100644 index 0000000..11c3433 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/1/4.in @@ -0,0 +1 @@ +8 2
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/generator/1/5.in b/store/works/life/algorithm-contest-2/generator/1/5.in new file mode 100644 index 0000000..fda96a5 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/1/5.in @@ -0,0 +1 @@ +88888 5
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/generator/2/1.in b/store/works/life/algorithm-contest-2/generator/2/1.in new file mode 100644 index 0000000..37ba146 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/2/1.in @@ -0,0 +1,2 @@ +4
+6 2 9 1
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/generator/2/2.in b/store/works/life/algorithm-contest-2/generator/2/2.in new file mode 100644 index 0000000..01faa33 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/2/2.in @@ -0,0 +1,2 @@ +3
+13 22 11
diff --git a/store/works/life/algorithm-contest-2/generator/2/3.cpp b/store/works/life/algorithm-contest-2/generator/2/3.cpp new file mode 100644 index 0000000..0eeadd1 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/2/3.cpp @@ -0,0 +1,15 @@ +#include <iostream>
+#include <random>
+
+using std::cout;
+
+int main() {
+ std::default_random_engine engine(std::random_device{}());
+ std::uniform_int_distribution<int> distribution(1, 5000);
+ const int SIZE = 5000;
+ cout << SIZE << '\n';
+ for (int i = 0; i < SIZE; i++) {
+ cout << distribution(engine) << ' ';
+ }
+ return 0;
+}
diff --git a/store/works/life/algorithm-contest-2/generator/2/4.cpp b/store/works/life/algorithm-contest-2/generator/2/4.cpp new file mode 100644 index 0000000..08d5c14 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/2/4.cpp @@ -0,0 +1,15 @@ +#include <iostream>
+#include <random>
+
+using std::cout;
+
+int main() {
+ std::default_random_engine engine(std::random_device{}());
+ std::uniform_int_distribution<int> distribution(1, 9999);
+ const int SIZE = 9999;
+ cout << SIZE << '\n';
+ for (int i = 0; i < SIZE; i++) {
+ cout << distribution(engine) << ' ';
+ }
+ return 0;
+}
diff --git a/store/works/life/algorithm-contest-2/generator/2/5.cpp b/store/works/life/algorithm-contest-2/generator/2/5.cpp new file mode 100644 index 0000000..bae2a90 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/2/5.cpp @@ -0,0 +1,15 @@ +#include <iostream>
+#include <random>
+
+using std::cout;
+
+int main() {
+ std::default_random_engine engine(std::random_device{}());
+ std::uniform_int_distribution<int> distribution(1, 9999);
+ const int SIZE = 9998;
+ cout << SIZE << '\n';
+ for (int i = 0; i < SIZE; i++) {
+ cout << distribution(engine) << ' ';
+ }
+ return 0;
+}
diff --git a/store/works/life/algorithm-contest-2/generator/3/1.in b/store/works/life/algorithm-contest-2/generator/3/1.in new file mode 100644 index 0000000..170d639 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/3/1.in @@ -0,0 +1,4 @@ +3
+#..
+...
+#.#
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/generator/3/2.in b/store/works/life/algorithm-contest-2/generator/3/2.in new file mode 100644 index 0000000..7cefeb0 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/3/2.in @@ -0,0 +1,5 @@ +4
+#...
+....
+#.#.
+....
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/generator/3/3.in b/store/works/life/algorithm-contest-2/generator/3/3.in new file mode 100644 index 0000000..51fff91 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/3/3.in @@ -0,0 +1,6 @@ +5
+#....
+.....
+.....
+.....
+.....
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/generator/3/4.cpp b/store/works/life/algorithm-contest-2/generator/3/4.cpp new file mode 100644 index 0000000..ed2fbb6 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/3/4.cpp @@ -0,0 +1,18 @@ +#include <iostream>
+#include <random>
+
+using std::cout;
+
+int main() {
+ std::default_random_engine engine(std::random_device{}());
+ std::uniform_int_distribution<int> distribution(1, 100);
+ const int SIZE = 100;
+ cout << SIZE << '\n';
+ for (int i = 0; i < SIZE; i++) {
+ for (int j = 0; j < SIZE; j++) {
+ cout << (distribution(engine) > 90 ? '#' : '.');
+ }
+ cout << '\n';
+ }
+ return 0;
+}
diff --git a/store/works/life/algorithm-contest-2/generator/3/5.cpp b/store/works/life/algorithm-contest-2/generator/3/5.cpp new file mode 100644 index 0000000..bf1d14c --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/3/5.cpp @@ -0,0 +1,18 @@ +#include <iostream>
+#include <random>
+
+using std::cout;
+
+int main() {
+ std::default_random_engine engine(std::random_device{}());
+ std::uniform_int_distribution<int> distribution(1, 100);
+ const int SIZE = 100;
+ cout << SIZE << '\n';
+ for (int i = 0; i < SIZE; i++) {
+ for (int j = 0; j < SIZE; j++) {
+ cout << (distribution(engine) < 75 ? '#' : '.');
+ }
+ cout << '\n';
+ }
+ return 0;
+}
diff --git a/store/works/life/algorithm-contest-2/generator/4/1.in b/store/works/life/algorithm-contest-2/generator/4/1.in new file mode 100644 index 0000000..feef14b --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/4/1.in @@ -0,0 +1,3 @@ +2 10
+6 5
+5 6
diff --git a/store/works/life/algorithm-contest-2/generator/4/2.in b/store/works/life/algorithm-contest-2/generator/4/2.in new file mode 100644 index 0000000..d72e475 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/4/2.in @@ -0,0 +1,4 @@ +3 20
+1 2
+2 1
+3 4
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/generator/4/3.in b/store/works/life/algorithm-contest-2/generator/4/3.in new file mode 100644 index 0000000..60d56de --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/4/3.in @@ -0,0 +1,4 @@ +3 1
+4 5
+8 6
+7 7
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/generator/4/4.cpp b/store/works/life/algorithm-contest-2/generator/4/4.cpp new file mode 100644 index 0000000..fc0de0b --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/4/4.cpp @@ -0,0 +1,29 @@ +#include <iostream>
+#include <random>
+#include <vector>
+
+using std::cout;
+
+int main() {
+ std::default_random_engine engine(std::random_device{}());
+ std::uniform_int_distribution<int> distribution(1, 1000);
+ const int SIZE = 100;
+ std::vector<int> b;
+
+ for (int i = 0; i < SIZE * 2; i++) {
+ b.push_back(distribution(engine));
+ }
+
+ long long sum = 0;
+ for (int i = 0; i < SIZE; i++) {
+ sum += b[i * 2] * b[i * 2 + 1];
+ }
+
+ cout << SIZE << ' ' << (sum + 10) << '\n';
+
+ for (int i = 0; i < SIZE; i++) {
+ cout << b[i * 2] << ' ' << b[i * 2 + 1] << '\n';
+ }
+
+ return 0;
+}
diff --git a/store/works/life/algorithm-contest-2/generator/4/5.cpp b/store/works/life/algorithm-contest-2/generator/4/5.cpp new file mode 100644 index 0000000..518a4aa --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/4/5.cpp @@ -0,0 +1,29 @@ +#include <iostream>
+#include <random>
+#include <vector>
+
+using std::cout;
+
+int main() {
+ std::default_random_engine engine(std::random_device{}());
+ std::uniform_int_distribution<int> distribution(1, 10000);
+ const int SIZE = 600;
+ std::vector<int> b;
+
+ for (int i = 0; i < SIZE * 2; i++) {
+ b.push_back(distribution(engine));
+ }
+
+ long long sum = 0;
+ for (int i = 0; i < SIZE; i++) {
+ sum += b[i * 2] * b[i * 2 + 1];
+ }
+
+ cout << SIZE << ' ' << 5000 << '\n';
+
+ for (int i = 0; i < SIZE; i++) {
+ cout << b[i * 2] << ' ' << b[i * 2 + 1] << '\n';
+ }
+
+ return 0;
+}
diff --git a/store/works/life/algorithm-contest-2/generator/4/6.cpp b/store/works/life/algorithm-contest-2/generator/4/6.cpp new file mode 100644 index 0000000..b4bdb00 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/4/6.cpp @@ -0,0 +1,29 @@ +#include <iostream>
+#include <random>
+#include <vector>
+
+using std::cout;
+
+int main() {
+ std::default_random_engine engine(std::random_device{}());
+ std::uniform_int_distribution<int> distribution(1, 10000);
+ const int SIZE = 100;
+ std::vector<int> b;
+
+ for (int i = 0; i < SIZE * 2; i++) {
+ b.push_back(distribution(engine));
+ }
+
+ long long sum = 0;
+ for (int i = 0; i < SIZE; i++) {
+ sum += b[i * 2] * b[i * 2 + 1];
+ }
+
+ cout << SIZE << ' ' << 5000 << '\n';
+
+ for (int i = 0; i < SIZE; i++) {
+ cout << b[i * 2] << ' ' << b[i * 2 + 1] << '\n';
+ }
+
+ return 0;
+}
diff --git a/store/works/life/algorithm-contest-2/generator/5/1.in b/store/works/life/algorithm-contest-2/generator/5/1.in new file mode 100644 index 0000000..a1dfd91 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/5/1.in @@ -0,0 +1,2 @@ +5 3
+6 1 2 3 4
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/generator/5/2.in b/store/works/life/algorithm-contest-2/generator/5/2.in new file mode 100644 index 0000000..7c0d388 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/5/2.in @@ -0,0 +1,2 @@ +6 8
+1 9 5 4 3 6
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/generator/5/3.cpp b/store/works/life/algorithm-contest-2/generator/5/3.cpp new file mode 100644 index 0000000..62d18c4 --- /dev/null +++ b/store/works/life/algorithm-contest-2/generator/5/3.cpp @@ -0,0 +1,47 @@ +#include <iostream>
+#include <random>
+#include <vector>
+
+using std::cout;
+
+int main() {
+ std::default_random_engine engine(std::random_device{}());
+ std::uniform_int_distribution<int> insert_distribution(0, 997);
+ std::uniform_int_distribution<int> distribution(1, 100000);
+ const int SIZE = 1000;
+ std::vector<int> v;
+
+ for (int i = 0; i < SIZE - 1; i++) {
+ v.push_back(distribution(engine));
+ }
+
+ int K = 320;
+
+ int a_index = insert_distribution(engine);
+ int a = v[a_index];
+ int b_index = insert_distribution(engine);
+ while (b_index == a_index) {
+ b_index = insert_distribution(engine);
+ }
+ int b = v[b_index];
+
+ int c_index = insert_distribution(engine);
+ while (c_index == a_index && c_index == b_index) {
+ c_index = insert_distribution(engine);
+ }
+ int c = v[c_index];
+
+ int d = (((-a - b - c) % K + K) % K) + 20 * K;
+
+ int d_index = insert_distribution(engine);
+
+ v.insert(v.cbegin() + d_index, c);
+
+ cout << SIZE << ' ' << K << '\n';
+
+ for (int i = 0; i < SIZE; i++) {
+ cout << v[i] << ' ';
+ }
+
+ return 0;
+}
diff --git a/store/works/life/algorithm-contest-2/output.zip b/store/works/life/algorithm-contest-2/output.zip Binary files differnew file mode 100644 index 0000000..9ef7e40 --- /dev/null +++ b/store/works/life/algorithm-contest-2/output.zip diff --git a/store/works/life/algorithm-contest-2/pack.ps1 b/store/works/life/algorithm-contest-2/pack.ps1 new file mode 100644 index 0000000..6d77d81 --- /dev/null +++ b/store/works/life/algorithm-contest-2/pack.ps1 @@ -0,0 +1,6 @@ +foreach ($problem in 1..5) {
+ Push-Location "output/$problem"
+ 7z a -tzip "$problem.zip" *
+ Move-Item "$problem.zip" ..
+ Pop-Location
+}
diff --git a/store/works/life/algorithm-contest-2/problems.pdf b/store/works/life/algorithm-contest-2/problems.pdf Binary files differnew file mode 100644 index 0000000..dfb7df1 --- /dev/null +++ b/store/works/life/algorithm-contest-2/problems.pdf diff --git a/store/works/life/algorithm-contest-2/solution/1.cpp b/store/works/life/algorithm-contest-2/solution/1.cpp new file mode 100644 index 0000000..2689f9d --- /dev/null +++ b/store/works/life/algorithm-contest-2/solution/1.cpp @@ -0,0 +1,34 @@ +#include <iostream>
+#include <cstdio>
+#include <cstring>
+#include <algorithm>
+#include <vector>
+#include <queue>
+#include <stack>
+#include <set>
+#include <map>
+#include <cmath>
+#include <unordered_map>
+#include <unordered_set>
+#include <string>
+#include <sstream>
+#include <climits>
+#define x first
+#define y second
+#define pub push_back
+#define mp make_pair
+#define ll long long
+using namespace std;
+
+int x, y;
+
+int main(void) {
+ cin >> x >> y;
+ int ans = x;
+ while (x >= y) {
+ ans += x / y;
+ x = x / y + x % y;
+ }
+ cout << ans;
+ return 0;
+}
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/solution/2.cpp b/store/works/life/algorithm-contest-2/solution/2.cpp new file mode 100644 index 0000000..4410da0 --- /dev/null +++ b/store/works/life/algorithm-contest-2/solution/2.cpp @@ -0,0 +1,41 @@ +#define _CRT_SECURE_NO_WARNINGS
+#include <iostream>
+#include <cstdio>
+#include <cstring>
+#include <algorithm>
+#include <vector>
+#include <queue>
+#include <stack>
+#include <set>
+#include <map>
+#include <cmath>
+#include <unordered_map>
+#include <unordered_set>
+#include <string>
+#include <sstream>
+#include <climits>
+#define x first
+#define y second
+#define pub push_back
+#define mp make_pair
+#define ll long long
+using namespace std;
+typedef pair<int, int> PII;
+
+const int MAXN = 1e5 + 5;
+int n, a[MAXN];
+
+int main(void) {
+ cin >> n;
+ for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
+ sort(a + 1, a + 1 + n);
+
+ int l = 1, r = n;
+ ll ans = 0;
+
+ while (l < r) {
+ ans += (a[r--] - a[l++]);
+ }
+ cout << ans;
+ return 0;
+}
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/solution/3.cpp b/store/works/life/algorithm-contest-2/solution/3.cpp new file mode 100644 index 0000000..a97e351 --- /dev/null +++ b/store/works/life/algorithm-contest-2/solution/3.cpp @@ -0,0 +1,77 @@ +#include <iostream>
+#include <cstdio>
+#include <cstring>
+#include <algorithm>
+#include <vector>
+#include <queue>
+#include <stack>
+#include <set>
+#include <map>
+#include <cmath>
+#include <unordered_map>
+#include <unordered_set>
+#include <string>
+#include <sstream>
+#include <climits>
+#define x first
+#define y second
+#define pub push_back
+#define mp make_pair
+#define ll long long
+using namespace std;
+typedef pair<int, int> PII;
+
+struct node{
+ int x, y;
+ node(){}
+ node(int _x = 0,int _y = 0): x(_x), y(_y){}
+};
+
+int dir[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
+int n;
+vector<string> graph;
+vector<vector<int>> vis;
+
+int solve() {
+ queue<node> Q;
+ for(int i = 0;i < n;++i){
+ for(int j = 0;j < n;++j){
+ if(graph[i][j] == '#') Q.push(node(i,j));
+ vis[i][j] = 0;
+ }
+ }
+
+ if(Q.size() == n * n || Q.empty()) return -1;
+
+ int dis = 0;
+ while(!Q.empty()){
+ int size = Q.size();
+ while(size-- > 0){
+ node cur = Q.front();
+ Q.pop();
+ for(int i = 0;i < 4;i++){
+ int nextX = cur.x + dir[i][0];
+ int nextY = cur.y + dir[i][1];
+ if(nextX > -1 && nextX < n && nextY > -1 && nextY < n && graph[nextX][nextY] == '.' && !vis[nextX][nextY]){
+ vis[nextX][nextY] = 1;
+ Q.push(node(nextX,nextY));
+ }
+ }
+ }
+ if(!Q.empty()) dis += 1;
+ }
+ return dis;
+}
+
+int main(void) {
+ cin >> n;
+ string line;
+ vis.resize(n + 1, vector<int>(n + 1));
+ for (int i = 0; i < n; i++) {
+ cin >> line;
+ graph.push_back(line);
+ }
+
+ cout << solve();
+ return 0;
+}
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/solution/4.cpp b/store/works/life/algorithm-contest-2/solution/4.cpp new file mode 100644 index 0000000..93c9190 --- /dev/null +++ b/store/works/life/algorithm-contest-2/solution/4.cpp @@ -0,0 +1,48 @@ +#define _CRT_SECURE_NO_WARNINGS
+#include <iostream>
+#include <cstdio>
+#include <cstring>
+#include <algorithm>
+#include <vector>
+#include <set>
+#include <map>
+#include <cmath>
+#include <unordered_map>
+#define x first
+#define y second
+#define pub push_back
+#define MP make_pair
+#define LL long long
+using namespace std;
+typedef pair<int, int> PII;
+
+const int MAXN = 1e5 + 5;
+int n, k, h[MAXN], w[MAXN];
+
+bool check(int m) {
+ if (m == 0) return true;
+ int cnt = 0;
+ for (int i = 0; i < n; i++) {
+ cnt += (h[i] / m) * (w[i] / m);
+ }
+ return cnt >= k;
+}
+
+int main(void) {
+ cin >> n >> k;
+ int mx = 0;
+ for (int i = 0; i < n; i++) {
+ scanf("%d", &h[i]);
+ scanf("%d", &w[i]);
+ mx = max(mx, max(h[i], w[i]));
+ }
+
+ int l = 0, r = mx;
+ while (l < r) {
+ int m = (l + r + 1) >> 1;
+ if (check(m)) l = m;
+ else r = m - 1;
+ }
+ cout << r;
+ return 0;
+}
\ No newline at end of file diff --git a/store/works/life/algorithm-contest-2/solution/5-bf.cpp b/store/works/life/algorithm-contest-2/solution/5-bf.cpp new file mode 100644 index 0000000..f197e6b --- /dev/null +++ b/store/works/life/algorithm-contest-2/solution/5-bf.cpp @@ -0,0 +1,34 @@ +#include <iostream>
+
+int batteries[1000];
+
+int main(void) {
+ int N, K;
+ std::cin >> N >> K;
+ for (int i = 0; i < N; i++)
+ std::cin >> batteries[i];
+
+ int max = 0;
+ int max_index[4];
+
+ for (int i = 0; i < N; i++) {
+ for (int j = i + 1; j < N; j++) {
+ for (int k = j + 1; k < N; k++) {
+ for (int l = k + 1; l < N; l++) {
+ int sum = batteries[i] + batteries[j] + batteries[k] + batteries[l];
+ if (sum % K == 0 && sum > max) {
+ max = sum;
+ max_index[0] = i;
+ max_index[1] = j;
+ max_index[2] = k;
+ max_index[3] = l;
+ }
+ }
+ }
+ }
+ }
+
+ std::cout << max;
+
+ return 0;
+}
diff --git a/store/works/life/algorithm-contest-2/solution/5.cpp b/store/works/life/algorithm-contest-2/solution/5.cpp new file mode 100644 index 0000000..b668f95 --- /dev/null +++ b/store/works/life/algorithm-contest-2/solution/5.cpp @@ -0,0 +1,49 @@ +#include <iostream>
+#include <cstdio>
+#include <cstring>
+#include <algorithm>
+#include <vector>
+#include <queue>
+#include <stack>
+#include <set>
+#include <map>
+#include <cmath>
+#include <unordered_map>
+#include <unordered_set>
+#include <string>
+#include <sstream>
+#include <climits>
+#define x first
+#define y second
+#define pub push_back
+#define mp make_pair
+#define ll long long
+using namespace std;
+typedef pair<int, int> PII;
+
+int dp[1005][5][1005];
+int n, K, a[1005];
+
+int main(void) {
+ // freopen("3.in", "r", stdin);
+ cin >> n >> K;
+ for (int i = 1; i <= n; i++) cin >> a[i];
+
+ for (int i = 0; i < 1005; i++)
+ for (int j = 0; j < 4; j++)
+ for (int k = 0; k < 1005; k++)
+ dp[i][j][k] = INT_MIN;
+
+ dp[0][0][0] = 0;
+
+ for (int i = 1; i <= n; i++)
+ for (int j = 0; j <= 4; j++)
+ for (int k = 0; k < K; k++) {
+ if (j == 0) dp[i][j][k] = dp[i - 1][j][k];
+ else dp[i][j][k] = max(dp[i - 1][j][k], dp[i - 1][j - 1][((k - a[i]) % K + K) % K] + a[i]);
+ }
+
+
+ cout << dp[n][4][0];
+ return 0;
+}
\ No newline at end of file |