Skip to content

Commit 7656a17

Browse files
committed
1030
1 parent f022757 commit 7656a17

10 files changed

+1103
-33
lines changed

.clang-format

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Language: Cpp
2+
3+
BasedOnStyle: Google
4+
IndentWidth: 4
5+
TabWidth: 4

src/LG/lg-P1063.cpp

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#include <algorithm>
2+
#include <cstdio>
3+
#include <iostream>
4+
5+
constexpr int MAX_N = 205;
6+
7+
int a[MAX_N];
8+
int f[MAX_N][MAX_N];
9+
10+
template <typename T>
11+
T read();
12+
13+
template <typename T>
14+
void read(T &t);
15+
16+
template <typename T, typename... Args>
17+
void read(T &t, Args &...rest);
18+
19+
int main() {
20+
std::ios::sync_with_stdio(false);
21+
22+
int n;
23+
read(n);
24+
for (int i = 1; i <= n; i++) {
25+
read(a[i]);
26+
a[n + i] = a[i];
27+
}
28+
for (int l = 1; l <= n; l++) {
29+
for (int i = 1; i + l <= n * 2; i++) {
30+
const int j = i + l;
31+
for (int k = i + 1; k < j; k++) {
32+
f[i][j] =
33+
std::max(f[i][j], f[i][k] + f[k][j] + a[i] * a[k] * a[j]);
34+
}
35+
}
36+
}
37+
38+
int ans{};
39+
for (int i = 1; i <= n; i++) {
40+
ans = std::max(ans, f[i][n + i]);
41+
}
42+
std::cout << ans << '\n';
43+
44+
return 0;
45+
}
46+
47+
template <typename T>
48+
T read() {
49+
T x = 0, f = 1;
50+
char ch = getchar_unlocked();
51+
while (!isdigit(ch)) {
52+
if (ch == '-') f = -1;
53+
ch = getchar_unlocked();
54+
}
55+
while (isdigit(ch)) {
56+
x = x * 10 + ch - 48;
57+
ch = getchar_unlocked();
58+
}
59+
return x * f;
60+
}
61+
62+
template <typename T>
63+
void read(T &t) {
64+
t = read<T>();
65+
}
66+
67+
template <typename T, typename... Args>
68+
void read(T &t, Args &...rest) {
69+
t = read<T>();
70+
read(rest...);
71+
}

src/LG/lg-P1856.cpp

+172
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
#include <algorithm>
2+
#include <cmath>
3+
#include <cstdio>
4+
#include <iostream>
5+
#include <memory>
6+
7+
constexpr int MAX_N = 10050;
8+
constexpr int N = 20001;
9+
10+
struct {
11+
int l;
12+
int r;
13+
int h;
14+
int v;
15+
} o[MAX_N], e[MAX_N];
16+
17+
class SegTree {
18+
struct {
19+
int a;
20+
int c;
21+
int t;
22+
} tree[MAX_N << 3];
23+
24+
void pushdown(const int& x);
25+
26+
void seg_merge(const int& x);
27+
28+
void build(int x, int l, int r);
29+
30+
public:
31+
SegTree() { build(1, 1, N); }
32+
~SegTree() = default;
33+
34+
void mod(int x, int l, int r, const int& ml, const int& mr, const int& mv);
35+
36+
int query() const { return tree[1].a * (tree[1].c == 0); }
37+
};
38+
39+
int n;
40+
long long ans;
41+
42+
void solve();
43+
44+
template <typename T>
45+
T read();
46+
47+
template <typename T>
48+
void read(T& t);
49+
50+
template <typename T, typename... Args>
51+
void read(T& t, Args&... rest);
52+
53+
int main() {
54+
std::ios::sync_with_stdio(false);
55+
56+
read(n);
57+
for (int i = 1; i <= n; i++) {
58+
int a, b, c, d;
59+
read(a, b, c, d);
60+
a += 10001, b += 10001, c += 10001, d += 10001;
61+
o[i] = {a, b, c, d};
62+
e[i + i - 1] = {a, c - 1, b, 1};
63+
e[i + i] = {a, c - 1, d, -1};
64+
}
65+
solve();
66+
67+
for (int i = 1; i <= n; i++) {
68+
e[i + i - 1] = {o[i].r, o[i].v - 1, o[i].l, 1};
69+
e[i + i] = {o[i].r, o[i].v - 1, o[i].h, -1};
70+
}
71+
solve();
72+
73+
std::cout << ans << '\n';
74+
75+
return 0;
76+
}
77+
78+
#define lc (x << 1)
79+
#define rc ((x << 1) | 1)
80+
81+
void SegTree::pushdown(const int& x) {
82+
if (tree[x].t) {
83+
tree[lc].t += tree[x].t;
84+
tree[lc].c += tree[x].t;
85+
tree[rc].t += tree[x].t;
86+
tree[rc].c += tree[x].t;
87+
tree[x].t = 0;
88+
}
89+
}
90+
91+
void SegTree::seg_merge(const int& x) {
92+
if (tree[lc].c == tree[rc].c) {
93+
tree[x].c = tree[lc].c;
94+
tree[x].a = tree[lc].a + tree[rc].a;
95+
} else if (tree[lc].c < tree[rc].c) {
96+
tree[x].c = tree[lc].c;
97+
tree[x].a = tree[lc].a;
98+
} else {
99+
tree[x].c = tree[rc].c;
100+
tree[x].a = tree[rc].a;
101+
}
102+
}
103+
104+
void SegTree::build(int x, int l, int r) {
105+
if (l == r) {
106+
tree[x].a = 1;
107+
return;
108+
}
109+
const auto mid = (l + r) >> 1;
110+
build(lc, l, mid);
111+
build(rc, mid + 1, r);
112+
seg_merge(x);
113+
}
114+
115+
void SegTree::mod(int x, int l, int r, const int& ml, const int& mr,
116+
const int& mv) {
117+
if (ml <= l and r <= mr) {
118+
tree[x].c += mv;
119+
tree[x].t += mv;
120+
return;
121+
}
122+
const auto mid = (l + r) >> 1;
123+
pushdown(x);
124+
if (ml <= mid) {
125+
mod(lc, l, mid, ml, mr, mv);
126+
}
127+
if (mid < mr) {
128+
mod(rc, mid + 1, r, ml, mr, mv);
129+
}
130+
seg_merge(x);
131+
}
132+
133+
#undef lc
134+
#undef rc
135+
136+
void solve() {
137+
std::sort(e + 1, e + n + n + 1, [](const auto& x, const auto& y) {
138+
return x.h == y.h ? x.v > y.v : x.h < y.h;
139+
});
140+
auto segTree = std::make_unique<SegTree>();
141+
for (int i = 1; i <= n + n; i++) {
142+
const auto la = segTree->query();
143+
segTree->mod(1, 1, N, e[i].l, e[i].r, e[i].v);
144+
ans += std::abs(la - segTree->query());
145+
}
146+
}
147+
148+
template <typename T>
149+
T read() {
150+
T x = 0, f = 1;
151+
char ch = getchar_unlocked();
152+
while (!isdigit(ch)) {
153+
if (ch == '-') f = -1;
154+
ch = getchar_unlocked();
155+
}
156+
while (isdigit(ch)) {
157+
x = x * 10 + ch - 48;
158+
ch = getchar_unlocked();
159+
}
160+
return x * f;
161+
}
162+
163+
template <typename T>
164+
void read(T& t) {
165+
t = read<T>();
166+
}
167+
168+
template <typename T, typename... Args>
169+
void read(T& t, Args&... rest) {
170+
t = read<T>();
171+
read(rest...);
172+
}
File renamed without changes.

src/LG/lg-P2047.cpp

+96
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
#include <cstdio>
2+
#include <cstring>
3+
#include <iomanip>
4+
#include <iostream>
5+
6+
using ll = long long;
7+
8+
constexpr int MAX_N = 105;
9+
10+
ll d[MAX_N][MAX_N], c[MAX_N][MAX_N];
11+
double a[MAX_N];
12+
13+
template <typename T>
14+
T read();
15+
16+
template <typename T>
17+
void read(T& t);
18+
19+
template <typename T, typename... Args>
20+
void read(T& t, Args&... rest);
21+
22+
int main() {
23+
std::ios::sync_with_stdio(false);
24+
25+
memset(d, 0x3f, sizeof(d));
26+
int n, m;
27+
read(n, m);
28+
for (int i = 1; i <= n; i++) {
29+
d[i][i] = 0;
30+
}
31+
for (int i = 1; i <= m; i++) {
32+
int x, y, z;
33+
read(x, y, z);
34+
d[x][y] = d[y][x] = z;
35+
c[x][y] = c[y][x] = 1;
36+
}
37+
38+
for (int k = 1; k <= n; k++) {
39+
for (int i = 1; i <= n; i++) {
40+
for (int j = 1; j <= n; j++) {
41+
const auto v = d[i][k] + d[k][j];
42+
if (d[i][j] > v) {
43+
d[i][j] = v;
44+
c[i][j] = c[i][k] * c[k][j];
45+
} else if (d[i][j] == v) {
46+
c[i][j] += c[i][k] * c[k][j];
47+
}
48+
}
49+
}
50+
}
51+
for (int k = 1; k <= n; k++) {
52+
for (int i = 1; i <= n; i++) {
53+
if (k != i) {
54+
for (int j = 1; j <= n; j++) {
55+
if (i != j and k != j) {
56+
if (d[i][j] == d[i][k] + d[k][j]) {
57+
a[k] += 1.0 * c[i][k] * c[k][j] / c[i][j];
58+
}
59+
}
60+
}
61+
}
62+
}
63+
}
64+
65+
for (int i = 1; i <= n; i++) {
66+
std::cout << std::fixed << std::setprecision(3) << a[i] << '\n';
67+
}
68+
69+
return 0;
70+
}
71+
72+
template <typename T>
73+
T read() {
74+
T x = 0, f = 1;
75+
char ch = getchar_unlocked();
76+
while (!isdigit(ch)) {
77+
if (ch == '-') f = -1;
78+
ch = getchar_unlocked();
79+
}
80+
while (isdigit(ch)) {
81+
x = x * 10 + ch - 48;
82+
ch = getchar_unlocked();
83+
}
84+
return x * f;
85+
}
86+
87+
template <typename T>
88+
void read(T& t) {
89+
t = read<T>();
90+
}
91+
92+
template <typename T, typename... Args>
93+
void read(T& t, Args&... rest) {
94+
t = read<T>();
95+
read(rest...);
96+
}

0 commit comments

Comments
 (0)