Skip to content

Commit ddf48b4

Browse files
committed
feat: kick-start 2022 round d
1 parent 3cef149 commit ddf48b4

File tree

5 files changed

+199
-0
lines changed

5 files changed

+199
-0
lines changed

kick-start/2022/RoundD/a.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
let input = ''
2+
3+
process.stdin.on('data', data => input += data)
4+
process.stdin.on('end', () => {
5+
const lines = input.split('\n')
6+
const [t] = lines[0].split(' ').map(Number)
7+
for (let kase = 1; kase <= t; kase++) {
8+
const [n, m] = lines[kase * 2 - 1].split(' ').map(Number)
9+
const a = lines[kase * 2].split(' ').map(Number).sort((a, b) => b - a)
10+
let sum = 0
11+
a[-1] = 0
12+
for (let i = -1; i < a.length; i++) {
13+
sum += a[i]
14+
if (i === m - 2) {
15+
// [m-1, n-1]
16+
// console.log(((n - m + 1) % 2) ? a[(m + n - 2) / 2] : ((a[(m + n - 2 - 1) / 2] + a[(m + n - 2 + 1) / 2]) / 2))
17+
sum += ((n - m + 1) % 2) ? a[(m + n - 2) / 2] : ((a[(m + n - 2 - 1) / 2] + a[(m + n - 2 + 1) / 2]) / 2)
18+
break
19+
}
20+
}
21+
console.log(`Case #${kase}: ${sum}`)
22+
}
23+
})

kick-start/2022/RoundD/b.js

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
let input = ''
2+
3+
process.stdin.on('data', data => input += data)
4+
process.stdin.on('end', () => {
5+
const lines = input.split('\n')
6+
const [t] = lines[0].split(' ').map(Number)
7+
for (let kase = 0; kase < t; kase++) {
8+
const [n] = lines[kase * 5 + 1].split(' ').map(Number)
9+
const a = lines[kase * 5 + 2].split(' ').map(Number)
10+
const [m] = lines[kase * 5 + 3].split(' ').map(Number)
11+
const b = lines[kase * 5 + 4].split(' ').map(Number)
12+
const [k] = lines[kase * 5 + 5].split(' ').map(Number)
13+
// console.log(`Case #${kase + 1}`, n, a, m, b, k)
14+
// f[i]: 从 a 里面选 i 个数的最大
15+
const f = Array(n + 1).fill(0)
16+
let sum = Array(n + 1).fill(0)
17+
for (let i = 0; i < n; i++) sum[i + 1] = sum[i] + a[i]
18+
for (let i = 0; i <= n; i++) {
19+
// 从左侧选 j 个数
20+
for (let j = 0; j <= i; j++) {
21+
const k = i - j
22+
// [0, j-1], [n-k, n-1]
23+
f[i] = Math.max(f[i], sum[j] + sum[n] - sum[n - k])
24+
}
25+
}
26+
27+
const g = Array(m + 1).fill(0)
28+
sum = Array(m + 1).fill(0)
29+
for (let i = 0; i < m; i++) sum[i + 1] = sum[i] + b[i]
30+
for (let i = 0; i <= m; i++) {
31+
// 从左侧选 j 个数
32+
for (let j = 0; j <= i; j++) {
33+
const k = i - j
34+
// [0, j-1], [n-k, n-1]
35+
g[i] = Math.max(g[i], sum[j] + sum[m] - sum[m - k])
36+
}
37+
}
38+
39+
let ans = 0
40+
for (let i = 0; i <= Math.min(k, n); i++) {
41+
if (k - i < 0 || k - i > m) continue
42+
ans = Math.max(ans, f[i] + g[k - i])
43+
}
44+
45+
console.log(`Case #${kase + 1}: ${ans}`)
46+
}
47+
})

kick-start/2022/RoundD/c.js

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
let input = ''
2+
3+
process.stdin.on('data', data => input += data)
4+
process.stdin.on('end', () => {
5+
const lines = input.split('\n')
6+
const [t] = lines[0].split(' ').map(Number)
7+
for (let kase = 0; kase < t; kase++) {
8+
const [n] = lines[kase * 4 + 1].split(' ').map(Number)
9+
const s = lines[kase * 4 + 2].split(' ').map(Number)
10+
const [m] = lines[kase * 4 + 3].split(' ').map(Number)
11+
const k = lines[kase * 4 + 4].split(' ').map(Number)
12+
13+
const pos = Array(3000).fill(0).map(() => [])
14+
for (let i = 0; i < m; i++) {
15+
pos[k[i]].push(i)
16+
}
17+
18+
const solve = (i) => {
19+
if (i === n - 1) return pos[s[i]].map((p) => [p, 0])
20+
const ans = []
21+
const last = solve(i + 1)
22+
for (const p of pos[s[i]]) {
23+
let cost = 1e10
24+
for (const [lp, lc] of last) {
25+
cost = Math.min(cost, lc + Math.abs(p - lp))
26+
}
27+
ans.push([p, cost])
28+
}
29+
ans.sort((a, b) => a[1] - b[1])
30+
while (ans[ans.length - 1][1] - ans[0][1] >= m) ans.pop()
31+
return ans
32+
}
33+
34+
console.log(`Case #${kase + 1}: ${solve(0).reduce((p, c) => Math.min(p, c[1]), 1e10)}`)
35+
}
36+
})

kick-start/2022/RoundD/d-case-1.js

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
let input = ''
2+
3+
process.stdin.on('data', data => input += data)
4+
process.stdin.on('end', () => {
5+
const lines = input.split('\n')
6+
let loc = 0
7+
const [t] = lines[loc++].split(' ').map(Number)
8+
for (let kase = 0; kase < t; kase++) {
9+
const [n, m, k] = lines[loc++].split(' ').map(Number)
10+
const e = Array(n + 1).fill(0).map(() => [])
11+
const er = Array(n + 1).fill(0).map(() => [])
12+
for (let i = loc; i < loc + m; i++) {
13+
// console.log(i, lines[i])
14+
let [a, b] = lines[i].split(' ').map(Number)
15+
a--, b--
16+
// console.log(a, b)
17+
e[a].push(b)
18+
er[b].push(a)
19+
}
20+
loc += m
21+
22+
const f = Array(n).fill(1)
23+
for (let i = 0; i < n; i++) {
24+
// 第 i 个人是 not innocent 的
25+
let ok = true
26+
27+
if (er[i].length > 0) ok = false
28+
29+
if (ok) {
30+
f[i] = 0
31+
}
32+
}
33+
34+
// console.log(f)
35+
console.log(`Case #${kase + 1}: ${f.reduce((p, c) => p + c, 0)}`)
36+
}
37+
})

kick-start/2022/RoundD/d.js

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
let input = ''
2+
3+
process.stdin.on('data', data => input += data)
4+
process.stdin.on('end', () => {
5+
const lines = input.split('\n')
6+
let loc = 0
7+
const [t] = lines[loc++].split(' ').map(Number)
8+
for (let kase = 0; kase < t; kase++) {
9+
const [n, m, k] = lines[loc++].split(' ').map(Number)
10+
const e = Array(n + 1).fill(0).map(() => [])
11+
for (let i = loc; i < loc + m; i++) {
12+
let [a, b] = lines[i].split(' ').map(Number)
13+
a--, b--
14+
// console.log(a, b)
15+
e[a].push(b)
16+
}
17+
loc += m
18+
19+
const f = Array(n).fill(1)
20+
for (let i = 0; i < 1 << n; i++) {
21+
let ok = true
22+
23+
let cnt = 0
24+
for (let j = 0; j < n; j++) {
25+
if (!((i >> k) & 1)) cnt++
26+
}
27+
if (cnt > k) continue
28+
29+
for (let j = 0; j < n; j++) {
30+
// j is innocent
31+
if ((i >> j) & 1) {
32+
for (const k of e[j]) {
33+
// k is not innocent
34+
if (!((i >> k) & 1)) {
35+
ok = false
36+
break
37+
}
38+
}
39+
}
40+
if (!ok) break
41+
}
42+
43+
if (ok) {
44+
for (let j = 0; j < n; j++) {
45+
// not innocent
46+
if (!((i >> j) & 1)) {
47+
f[j] = 0
48+
}
49+
}
50+
}
51+
}
52+
53+
// console.log(f)
54+
console.log(`Case #${kase + 1}: ${f.reduce((p, c) => p + c, 0)}`)
55+
}
56+
})

0 commit comments

Comments
 (0)