Skip to content

Commit 7751bcf

Browse files
committed
添加和调整了部分内容
1 parent 5fea51b commit 7751bcf

5 files changed

Lines changed: 318 additions & 13 deletions

File tree

README.md

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
**当前最新普通版发布版本为 `v1.1.1`****最新打印版发布版本为 `v1.1.0` (总词数约9.0w(含代码))**
1+
**当前最新普通版发布版本为 `v1.1.2`****最新打印版发布版本为 `v1.1.0` (总词数约9.0w(含代码))**
22

33
成品为 `template.pdf` (移步 [releases](https://github.com/lr580/algorithm_template/releases) 查看/下载)
44

5-
> 因打印版 `pdf` 目录页码制作困难,因此直到版本 `v1.2.0` 之前不会更新打印版,只会更新普通发布版
5+
> 因打印版 `pdf` 目录页码制作困难,因此直到版本 `v1.2.0` 之前不会更新打印版,只会更新普通发布版。另,由于本人退役,未来预计将不会有大更新。
66
77
<hr/>
88

@@ -46,6 +46,16 @@
4646

4747
## 更新日志
4848

49+
- 22/11/20 - 22/12/3 (`v1.1.2`)
50+
51+
- 添加了整数三分代码
52+
53+
- 修改了部分 KMP / 字符串例题描述
54+
- 添加了 prim 暴力模板和最小生成树输出方案代码
55+
- 添加了 floyd 输出方案代码
56+
- 微加了 manacher 内容
57+
- 添加了上下取整及其不等式公式
58+
4959
- 22/10/24 - 22/11/11 (`v1.1.1`)
5060

5161
- 添加了树上随机游走
@@ -62,19 +72,19 @@
6272
- 添加了 exLucas 模板
6373
- 修改了同余一条性质的错误表述
6474
- 添加了 STL multiset 部分内容
65-
75+
6676
- 22/10/19 - 22/10/20 (`v1.1.0`)
6777

6878
- 添加了哈密顿图结论
6979
- 添加了划分数结论
7080
- 修改了点双连通分量参考代码
7181
- 添加了斐波那契数列等新的数学结论
7282
- 添加了竞赛图兰道定理等结论
73-
83+
7484
- 22/09/01 - 22/10/18 (`v1.0.5`)
7585

7686
- 添加了边双连通分量例题
77-
87+
7888
- 添加了可撤销并查集+线段树分治动态判二分图的例题
7989
- 修改了 manacher 一处错误
8090
- 修改了数论基础同余的一处书写错误
@@ -85,7 +95,7 @@
8595
- 添加了斐波那契数列模数循环节结论
8696
- 添加了线性快速幂
8797
- 添加了差分约束算法
88-
98+
8999
- 22/06/10 - 22/08/27 (`v1.0.4`)
90100

91101
- 微改了 STL 的 nth\_element 和 inplace\_merge

code/floyd_path.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
using ll = long long;
4+
const ll mn = 1e2 + 10;
5+
ll n, m, d[mn][mn], nx[mn][mn];
6+
signed main()
7+
{
8+
ios::sync_with_stdio(false), cin.tie(0);
9+
cin >> n >> m;
10+
memset(d, 0x3f, sizeof d);
11+
for (ll i = 1; i <= n; ++i)
12+
{
13+
d[i][i] = 0, nx[i][i] = i;
14+
}
15+
for (ll i = 1, u, v, w; i <= m; ++i)
16+
{
17+
cin >> u >> v >> w;
18+
d[u][v] = w, nx[u][v] = v;
19+
}
20+
for (ll k = 1; k <= n; ++k)
21+
{
22+
for (ll i = 1; i <= n; ++i)
23+
{
24+
for (ll j = 1; j <= n; ++j)
25+
{
26+
if (d[i][j] > d[i][k] + d[k][j])
27+
{
28+
d[i][j] = d[i][k] + d[k][j];
29+
nx[i][j] = nx[i][k];
30+
}
31+
}
32+
}
33+
}
34+
ll q;
35+
cin >> q;
36+
for (ll u, v; q--;)
37+
{
38+
cin >> u >> v;
39+
cout << u << ' ';
40+
while (u != v)
41+
{
42+
cout << nx[u][v] << ' ';
43+
u = nx[u][v];
44+
}
45+
cout << '\n';
46+
}
47+
return 0;
48+
}
49+
/*
50+
5 5
51+
1 2 1
52+
2 3 2
53+
3 4 1
54+
1 5 1
55+
5 3 1
56+
1
57+
1 4
58+
*/

code/p1265_prim.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
using ll = long long;
4+
using db = double;
5+
const ll mn = 5e3 + 10;
6+
ll n, x[mn], y[mn], suc, vis[mn];
7+
db d[mn], ans;
8+
ll sol[mn]; //如果要输出方案
9+
signed main()
10+
{
11+
cin >> n;
12+
for (ll i = 1; i <= n; ++i)
13+
{
14+
cin >> x[i] >> y[i];
15+
d[i] = 1e21;
16+
}
17+
d[1] = 0;
18+
for (ll t = 1; t <= n - 1; ++t)
19+
{
20+
ll a = 0;
21+
for (ll j = 1; j <= n; ++j)
22+
{
23+
if (!vis[j] && (!a || d[j] < d[a]))
24+
{
25+
a = j;
26+
}
27+
}
28+
vis[a] = true;
29+
for (ll b = 1; b <= n; ++b)
30+
{
31+
if (!vis[b])
32+
{
33+
db dis = sqrt((x[a] - x[b]) * (x[a] - x[b]) + (y[a] - y[b]) * (y[a] - y[b]));
34+
if (dis < d[b])
35+
{
36+
d[b] = dis;
37+
// sol[b] = a;
38+
}
39+
}
40+
}
41+
}
42+
for (ll i = 1; i <= n; ++i)
43+
{
44+
ans += d[i];
45+
// cout << i << ' ' << sol[i] << '\n'; [2,n] 有效
46+
}
47+
printf("%.2lf", ans);
48+
return 0;
49+
}

code/three_partition.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
//https://codeforces.com/gym/102992/problem/F
2+
#include <bits/stdc++.h>
3+
using namespace std;
4+
using ll = long long;
5+
using db = double;
6+
ll t, n, m, p;
7+
db q;
8+
db f(ll x)
9+
{
10+
return (x * n + m) / (1 - pow(q, x));
11+
}
12+
signed main()
13+
{
14+
scanf("%lld", &t);
15+
while (t--)
16+
{
17+
scanf("%lld%lld%lld", &n, &m, &p);
18+
q = 1 - 1e-4 * p;
19+
ll lf = 1, rf = 1e9;
20+
db ans = 1e21;
21+
while (lf < rf)
22+
{
23+
ll lc = (2 * lf + rf) / 3, rc = (2 * rf + lf + 2) / 3;
24+
db lv = f(lc), rv = f(rc);
25+
ans = min({ans, lv, rv});
26+
if (lv < rv)
27+
{
28+
rf = rc - 1;
29+
}
30+
else
31+
{
32+
lf = lc + 1;
33+
}
34+
}
35+
printf("%.12lf\n", ans);
36+
}
37+
return 0;
38+
}
39+
/*
40+
3
41+
1 1 5000
42+
1 1 1
43+
1 2 10000
44+
*/

0 commit comments

Comments
 (0)