정수 간격을 최대한 연장


14

정수의 교차하지 않는 간격 세트가 있다고 가정하십시오 [a1,b1],[a2,b2],[a3,b3],...,[aN,bN]. (여기서 [a,b]보다 크거나 같은 정수의 집합이다 a및보다 작거나 같음 b).

인덱스 간격 XbX - aX + 1값을 포함 합니다. 이 번호로 전화하겠습니다 cX.

각 간격은 다음 중 하나 일 수 있습니다 ...

  • 변경되지 않음 (로 유지됨 [aX,bX])
  • ( +번호 cX가 됨 [aX,bX + cX])으로 줄 번호 쪽을 향해 오른쪽으로 확장
  • 또는 ( -번호 cX가 됨 [aX - cX,bX])을 사용 하여 줄 번호 옆으로 왼쪽으로 확장

교차하지 않는 모든 업데이트 된 간격의 합집합으로 처리 할 수있는 최대 값은 얼마입니까?

형식의 문자열을 가져 [a1,b1],[a2,b2],[a3,b3],...,[aN,bN]와서이 최대 값을 계산 하는 함수 또는 프로그램을 작성하십시오 . 함수를 작성하는 경우 값을 반환하십시오. 전체 프로그램을 작성하는 경우 stdin을 사용하여 입력하고 값을 stdout에 인쇄하십시오 (또는 가장 가까운 대안을 사용하십시오).

모든 값이 정상적인 부호있는 32 비트 정수 한계 내에 있고 모든 인덱스 aXbX대해 작거나 같다고 가정 할 수 있습니다 X. 간격은 순서에 관계없이 항상 증가하지는 않습니다. 위 형식으로 문자열로 제공되어야합니다. 문자열이 비어있을 수 있으며,이 경우 대답은 0입니다.

바이트 단위로 가장 짧은 제출 이깁니다.

입력이 [-3,0],[1,2],[4,9]출력 인 경우 22가됩니다. 중간 간격에는 확장 할 공간이 없으므로 변경되지 않아야합니다. 왼쪽과 오른쪽 간격을 모두 확장 할 수 [-7,0][4,15]각각. 의 노동 조합 [-7,0][1,2][4,15]22 개 값의 3을 제외하고 -7 15 모든 값을 포함합니다.


3
입력에 언어 배열의 기본 문자열 표현을 사용할 수 있습니까, 아니면 정확히이 형식이어야합니까?
Martin Ender

@ MartinBüttner 아니요.이 정확한 형식을 사용해야합니다. (나는 그것이 양날 칼의 일종 인 것을 알고 있지만 그것이가는 방식이다.)
Calvin 's Hobbies

주어진 간격을 양쪽에서 늘릴 수 있습니까? 예를 들어, 가능 [5,6]하게 [3,8]((6)의 응답의 경우), 아니면 그냥 될 수 [5,8]또는 [3,6](4의 답변)?
MtnViewMark

@MtnViewMark 아니오. 그들은 한쪽에서만 연장되거나 전혀 확장되지 않습니다
Calvin 's Hobbies

답변:


4

하스켈, 145 바이트

import Data.List
x=maximum.map length.filter(nub>>=(==)).map concat.sequence.map(\[a,b]->[[2*a-b-1..b],[a..b],[a..2*b-a+1]]).read.('[':).(++"]")

샘플 실행 :

λ: x ""
0

λ: x "[5,6]"
4

λ: x "[-3,0],[1,2],[4,9]"
22

1

R, 282 278 269 247

이것은 문자열 입력을 처리하는 데 정말 빠릅니다. 골프를 더 잘 할 수있을 것 같지만 지금은 시간이 부족합니다.

f=function(s){i=matrix(strtoi(strsplit(gsub('[^0-9,-]','',s),',')[[1]]),nrow=2);l=0;if((a<-length(b<-order(i[1,])))>0){if(a>1)i=i[,b];l=diff(i[,1:a])+1;x=c(t(i));for(n in 1:a)if(n==1|n==a|x[n]-l[n]>x[n+a-1]|x[n+a]+l[n]<x[n+1])l[n]=l[n]*2;};sum(l)}

본질적으로 아이디어는

  • 문자열을 받아 2 행 행렬로 바꿉니다.
  • 올바른 순서인지 확인하십시오
  • 각 열의 차이점을 해결하십시오.
  • 첫 번째와 마지막 차이를 두 배로
  • 이전 또는 다음과의 간격이 충분하면 중간 차이를 두 배로 늘립니다.
  • 차이의 합을 반환

편집 : 나는 원래 문자를 잘못 계산 한 다음 몇 가지를 다시 정렬하기 위해 몇 가지를 재정렬했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.