牛客题解 | 列表补全

题目

题目链接

解题思路

这是一道关于分页展示的区间计算问题,需要计算两个列表L1和L2在当前页面的展示区间。主要思路如下:

  1. 对于L1列表:

    • 起始位置:\(\min(l1, offset)\)
    • 结束位置:\(\min(l1, offset+n)\)
  2. 对于L2列表:

    • 起始位置:\(\min(\max(offset-l1, 0), l2)\)
    • 结束位置:\(\min(\max(offset+n-l1, 0), l2)\)

关键点:

  • 需要考虑offset可能超过L1长度的情况
  • 需要考虑分页长度n可能超过列表总长度的情况
  • 使用 \(\max(x,0)\) 确保不会出现负数索引
  • 使用 \(\min\) 确保不会超过列表长度

代码

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int offset, n, l1, l2;
    while (cin >> offset >> n >> l1 >> l2) {
        // L1的区间
        int start1 = min(l1, offset);
        int end1 = min(l1, offset + n);
        
        // L2的区间
        int start2 = min(max(offset - l1, 0), l2);
        int end2 = min(max(offset + n - l1, 0), l2);
        
        cout << start1 << " " << end1 << " " 
             << start2 << " " << end2 << endl;
    }
    return 0;
}
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int offset = sc.nextInt();
            int n = sc.nextInt();
            int l1 = sc.nextInt();
            int l2 = sc.nextInt();
            
            // 计算L1的区间
            int start1 = Math.min(l1, offset);
            int end1 = Math.min(l1, offset + n);
            
            // 计算L2的区间
            int start2 = Math.min(Math.max(offset - l1, 0), l2);
            int end2 = Math.min(Math.max(offset + n - l1, 0), l2);
            
            System.out.printf("%d %d %d %d\n", start1, end1, start2, end2);
        }
    }
}
while True:
    try:
        offset, n, l1, l2 = map(int, input().split())
        
        # 计算L1的区间
        start1 = min(l1, offset)
        end1 = min(l1, offset + n)
        
        # 计算L2的区间
        start2 = min(max(offset - l1, 0), l2)
        end2 = min(max(offset + n - l1, 0), l2)
        
        print(start1, end1, start2, end2)
    except EOFError:
        break

算法及复杂度

  • 算法:简单的数学计算
  • 时间复杂度:\(\mathcal{O}(1)\) - 每组输入只需要进行简单的数学运算
  • 空间复杂度:\(\mathcal{O}(1)\) - 只需要存储几个整数变量
posted @ 2025-03-04 10:30  wangxiaoxiao  阅读(4)  评论(0)    收藏  举报