# 螳螂领地争霸
螳螂领地争霸 100
# 题目内容
在一根很高的竹子上生活着一群螳螂,每只螳螂都有一段自己的势力范围,不同螳螂在竹子上的领地有可能重叠,当发现自己的领地内出现其它螳螂时就会战斗,失败一方领地会被胜利一方螳螂占领。
# 输入描述
给定一个螳螂领地信息 originalLand[i] 数组:originalLand[i] = [x, y] 表示第 $i$ 只螳螂的领地在离地高度 $[x,y]$ 之间的主干上 $(x<y)$。螳螂的数量在 $[1,50]$ 之间,螳螂领地坐标 $[x,y]$ 中,$0 \le x < y \le 150$。
# 输出描述
请返回领地斗争结束后螳螂们的领地信息。返回的领地信息数组中,按照领地坐标升序返回;正确示例:[[3,7],[9,13]],错误示例:[[9,13],[3,7]]。
# 样例
# 样例 1
输入
1,5 4,6 8,15
1
输出
1,6 8,15
1
说明: 第一只螳螂的领地范围 $[1,5]$ 和第二只螳螂的领地范围 $[4,6]$ 有重叠,因此两只螳螂在巡逻过程中会发生冲突,最终一只螳螂被打败,两只螳螂的领地被胜利者占有,领地范围变为 $[1,6]$。
# 样例 2
输入
3,7 9,13
1
输出
3,7 9,13
1
说明: 两只螳螂的领地范围没有重叠,因此不会发生冲突,所以最终的领地状态和最初的领地状态是一致的。
# 样例 3
输入
1,4 4,5
1
输出
1,5
1
说明: 两只螳螂领地边界接触时也会触发冲突,形成领地合并。
# 代码
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let inputs = [];
rl.on('line', (input) => {
const originalLand = input.split(' ').map(v => v.split(',').map(Number));
originalLand.sort((a,b) => a[0]-b[0]);
let ans = [];
for(let i=0; i<originalLand.length; i++) {
if (i === 0) {
ans.push(originalLand[i]);
} else {
const [x, y] = ans[ans.length-1];
const [nx, ny] = originalLand[i];
if (nx > y) {
ans.push(originalLand[i]);
} else {
ans[ans.length - 1] = [x, y>ny ? y : ny];
}
}
}
console.log(ans.map(item => item.join(',')).join(' '))
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26