while 1:try:offset,n,l1,l2 = map(int,input().split())start1 = end1 = start2 = end2 = 0if offset>=l1: # 有被跳过的页start1 = end1 = l1if offset>=l1+l2: # 第二页是否被跳过start2 = end2 = l2else: # 第二页被展示的部分start2,end2 = offset-l1, min(l2,n+offset-l1)else: # 没有被跳过的页if offset+n<=l1: # 只展示第一页start1,end1 = offset,offset+nelse: # 展示第两页start1, end1 = offset,l1start2, end2 = 0, min(l2,n+offset-l1)print(start1,end1,start2,end2)except:break
每一页的处理逻辑都是类似的,判断起点的时候 注意判断是否跳过,判断结尾的时候 注意 判断是否超过页面
所以两页的处理可以用一个 判断s,e的函数一样处理,这样即使n个页面计算也完全无压力,并且逻辑清楚不容易错
while 1:try:def se(offset,n,l): # 返回 (剩余offset, 未展示的n, 该页的start, end)if offset>=l: # 该页被跳过offset-=lreturn offset,n,l,lelse: # 该页没被跳过if offset+n>l: # 这一页不够展示n -= (l-offset)return 0,n,offset,lelse: # 这一页够展示return 0,0,offset,offset+noffset,n,l1,l2 = map(int,input().split())offset,n,start1,end1 = se(offset,n,l1)offset,n,start2,end2 = se(offset,n,l2)print(start1,end1,start2,end2)except:break