이야기
"2016? 알 .. 맞아"장난감 판매업 자 힐버트가 그는 눈을 뜨고 귀에서 샐러드 드레싱을 닦아내고 아침 킥 스타트 크림을 먹었습니다. 모범적 인 휴일. 그는 지금 일하러 가고 회계를 마쳐야합니다.
크리스마스는 특히 그의 판매 기간 동안 매우 수익률이 높은 기간입니다. 힐버트 (Hilbert)는 그것이 어떻게 작동하는지 정확히 알고 있습니다 : 한 사람이 가게에 들어 와서 그들이 제공하는 첫 선물을 구입합니다. 그들은 그것을 지불하고 다른 상점으로 도망갑니다. 실제로 선물이 실제로 무엇을 의미 하는가 실제로 차이를 만들지 않습니다. 가격이 너무 높지 않으면 가격도 관련이 없습니다. 크리스마스까지 남은 시간에 따라 달라집니다. 시간이 짧을수록 고객의 변심이 커질수록 지불하고자하는 가격이 높아집니다.
힐버트가 시계를 보는 것만으로도 고객이 얼마를 소비 할 수 있는지 즉시 알 수 있습니다. 그는이 사실을 쉽게 활용할 수 있습니다. 그는 주어진 고객에게 팔 수있는 가장 비싼 선물을 찾아서 그에게 제공합니다. 그는 작년에이 교활한 전략을 사용하는 것을 잊었 음을 깨달았습니다. 그래도 바뀔거야!
그럼에도 불구하고, 힐버트는 실제로 그의 위대한 계획을 사용했다면 그의 사업이 얼마나 번성했는지를 알고 싶어합니다. 그는 매장에 온 사람들의 명단을 정리했지만, 얼마나 많은 돈을 벌 었는지 확신 할 수 없습니다.
당신의 작업 (TL; DR)
입력은 사용 가능한 선물 가격의 오름차순 목록과 고객 예산 목록으로 구성됩니다. 예산 목록은 고객이 상점에 도착한 순서와 동일하며 모든 고객이 적어도 이전 금액만큼 지불 할 의향이 있으며 이는 또한 오름차순임을 의미합니다.
각 고객마다 지불하고자하는 가장 비싼 선물을 찾아서 가격을 산출하십시오. 예산 내에서 선물을 사용할 수없는 경우 a를 출력하십시오 0.
당신은 얻을 -40%알고리즘의 점근 시간 복잡도 인 경우, 문자 보너스를 O(n+m)(오히려 사소한보다 O(n*m)) 경우 n, m입력 목록의 길이이다.
이것은 code-golf 이며 가장 짧은 바이트 수입니다. 표준 허점은 금지되어 있습니다.
예
입력:
1 2 2 2 5 7 10 20
1 1 2 3 6 6 15 21 21 22
산출:
1 0 2 2 5 2 10 20 7 0
이 작업은 지역 프로그래밍 대회에서 가져 와서 영어로 번역했습니다. 원래 과제는 다음과 같습니다. https://www.ksp.sk/ulohy/zadania/1131/