在工厂中,有个牛牛工作在一个流水线上,流水线可以看作一个坐标轴,第
个牛牛的位置是
,延长其手臂的长度为
,手臂可以朝向正向和反向,即第
个牛牛在流水线的工作范围为
,你需要计算最多可以让多少个牛牛同时在流水线上工作且工作范围互不相交(只交在一个点也算相交)。
在工厂中,有个牛牛工作在一个流水线上,流水线可以看作一个坐标轴,第
个牛牛的位置是
,延长其手臂的长度为
,手臂可以朝向正向和反向,即第
个牛牛在流水线的工作范围为
,你需要计算最多可以让多少个牛牛同时在流水线上工作且工作范围互不相交(只交在一个点也算相交)。
第一行一个整数
,
接下来
行,每行
个整数
所有的输入为整数,且
时,
.
一行一个整数代表答案
5 2 3 7 1 5 1 8 3 0 2
2
4 2 4 4 3 9 3 100 5
2
5 3 1 8 1 7 3 0 3 4 2
2
var readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); let countLine = 0; let len = 0; let data = []; rl.on('line', function (input) { if (countLine == 0) { len = input.split(' ')[0] countLine++ } else if (countLine <= len) { let [val1, val2] = input.split(' ') data.push([parseInt(val1), parseInt(val2)]) countLine++ } }); function main(data) { for (let i = 0; i < data.length; i++) { let [val1, val2] = data[i] data[i] = [val1 - val2, val1 + val2] } data.sort((a, b) => a[0] - b[0]) let index = 0 let res = 1 for (let i = 1; i < data.length; i++) { if (data[index][1] >= data[i][0]) { if (data[i][1] >= data[index][1]) { } else { index = i } } else { index = i res++ } } return res } rl.on('close', function () { let res = main(data) console.log(res) process.exit(0); });
num=input() num=int(num) list2=[] for i in range(num): list2.append([int(i) for i in input().split()]) cnt=1 list3=[] for i in list2: list3.append((i[0]-i[1],i[0]+i[1])) # 每一次取有边界最小的那个就行了. 所以先按照这个排序即可. list3=[(i[1],i[0]) for i in list3] list3.sort() list3=[(i[1],i[0]) for i in list3] # print(2) cnt=1 tmp=[] b=[] if len(list3)>0: b=(list3[0]) list3.pop(0) while(len(list3)>0): a=list3[0] if b[1]>=a[0]: list3.pop(0) else: # tmp.append(a) b=a cnt+=1 list3.pop(0) print(cnt) # print(2222222)
function loop(oArr, index) { let resultRange = [] let result = 0 for (let i = index, len = oArr.length; i < len; i++) { const element = oArr[i]; if( typeof(element) === 'string' || typeof(element) === 'number' ) { // 这是第一行 resultRange.push([0, element]) result++ } else { // 这是第n行 let min = element[0] - element[1] min = Math.max(0, min); let max = element[0] + element[1] let isAdd = true for (let j = 0; j < resultRange.length; j++) { if(isAdd) { const ele = resultRange[j]; if( min <= ele[1] || max <= ele[0]) { isAdd = false } } } if(isAdd) { // 可添加 resultRange.push([min, max]) result++ } } } return result; } function demo() { let result = 0 for (let index = 0, len = arguments.length; index < len; index++) { const res = loop(arguments, index) if(res > result) result = res } return result } console.log(demo(5, [2, 3], [7, 1], [5, 1], [8, 3], [0, 2])); console.log(demo(4, [2, 4], [4, 3], [9, 3], [100, 5])) console.log(demo(5, [3, 1], [8, 1], [7, 3], [0, 3], [4, 2]))但是第二个例子,结果是3,目前是认为自己没读懂题目。求大神解