1. 程式人生 > >【拼多多】列表補全

【拼多多】列表補全

 

連結:https://www.nowcoder.com/questionTerminal/8d677d9c6af643f28c2153ee4e435ea4
來源:牛客網
 

[程式設計題]列表補全

在商城的某個位置有一個商品列表,該列表是由L1、L2兩個子列表拼接而成。當用戶瀏覽並翻頁時,需要從列表L1、L2中獲取商品進行展示。展示規則如下:

1. 使用者可以進行多次翻頁,用offset表示使用者在之前頁面已經瀏覽的商品數量,比如offset為4,表示使用者已經看了4個商品

2. n表示當前頁面需要展示的商品數量

3. 展示商品時首先使用列表L1,如果列表L1長度不夠,再從列表L2中選取商品

4. 從列表L2中補全商品時,也可能存在數量不足的情況

請根據上述規則,計算列表L1和L2中哪些商品在當前頁面被展示了

 

輸入描述:

每個測試輸入包含1個測試用例,包含四個整數,分別表示偏移量offset、元素數量n,列表L1的長度l1,列表L2的長度l2。


 

輸出描述:

在一行內輸出四個整數分別表示L1和L2的區間start1,end1,start2,end2,每個數字之間有一個空格。
注意,區間段使用半開半閉區間表示,即包含起點,不包含終點。如果某個列表的區間為空,使用[0, 0)表示,如果某個列表被跳過,使用[len, len)表示,len表示列表的長度。

示例1

輸入

2 4 4 4
1 2 4 4
4 1 3 3

輸出

2 4 0 2
1 3 0 0
3 3 1 2

 

#include<iostream>
#include<algorithm>
using namespace std;
 
int main()
{
    int offset ,n,l1,l2;
    cin>>offset>>n>>l1>>l2;
    if(offset>=l1){
        cout<<l1<<" "<<l1<<" ";
        if(offset-l1==0){
            cout<<0<<" "<<min(n,l2)<<endl;
        }
        else {
            int t=offset-l1;
            cout<<min(t,l2)<<" "<<min(t+n,l2)<<endl;
        }
    }
    else{
        cout<<offset<<" "<<min(n+offset,l1)<<" ";
        if((n+offset)<l2)cout<<0<<" "<<0<<endl;
        else cout<<0<<" "<<min(abs(n-(l1-offset)),l2)<<endl;
    }
    return 0;
}