import sys


def main():
    for line in sys.stdin:
        offset, n, l1, l2 = map(int, line.strip().split())
        if offset+n<=l1:# 当前页面只在l1取商品
            start1, end1= offset, offset+n
            start2 = end2 = 0
        elif offset>=l1: #当前页面只在l2取
            start1 = end1 = l1
            start2 = min(offset-l1, l2)
            end2 = min(offset+n-l1, l2)
        else:  # 当前页面在l1和l2取
            pass
            start1 = offset
            end1 = l1
            start2 = 0
            end2 = min(offset+n-l1, l2)
        print(start1, end1, start2, end2)


if __name__ == "__main__":
    main()

这道题写的太绕了,实际上:

当前页要从总列表 L1 + L2 中,跳过前 offset 个,再取接下来的 n 个

但取的时候因为总列表是 L1 + L2拼起来的,所以当前页拿到的商品可能:

  1. 全部来自 L1
  2. 一部分来自 L1,剩下来自 L2
  3. 全部来自 L2
  4. 数量不够,最后只能取到一部分

所以:

  • offset+n<=len1:全在 L1
  • offset>=len1:全在 L2
  • 否则:跨两个列表