【拼多多】列表補全
阿新 • • 發佈:2019-01-06
連結:https://www.nowcoder.com/questionTerminal/8d677d9c6af643f28c2153ee4e435ea4
來源:牛客網
[程式設計題]列表補全
- 熱度指數:1172 時間限制:1秒 空間限制:32768K
- 演算法知識視訊講解
在商城的某個位置有一個商品列表,該列表是由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; }