1 条题解

  • 0
    @ 2025-8-25 19:16:46

    O(N)O(N)

    1. 时间转换

      • 每个研发中心i的本地时间 = 世界标准时间 + TiT_i 小时
      • 会议时间段 [x, x+1] 必须完全落在 [9, 18] 区间内
    2. 数学表达

      • 对于研发中心 i ,需要满足:9(x+Ti)179 \leq (x + T_i) \leq 17 (因为会议需要完整 1 小时,所以结束时间x+1+T_i ≤ 18)
    3. 等价条件

      • 9Tix17Ti9 - T_i \leq x \leq 17 - T_i
    4. 问题转化

      • 寻找一个 x (0 ≤ x ≤ 23),使得满足条件的研发中心尽可能多
      • 注意: x 是实数,但实际上只需要考虑整点(因为会议在整点开始)
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e3+10;
    int a[N], b[N]; // a[i]存储第i个中心的工程师数,b[i]存储时区差
    
    int main() {
        int n;
        cin >> n; // 输入研发中心数量
        for(int i=1; i<=n; i++){
            cin >> a[i] >> b[i]; // 输入每个中心的工程师数和时区差
        }
        int ans = 0; // 初始化最大工程师数
        for(int i=0; i<=23; i++){ // 枚举所有可能的会议开始时间(UTC 0-23点)
            int sum = 0; // 当前会议时间能参与的工程师总数
            for(int j=1; j<=n; j++){ // 遍历每个研发中心
                int x = (b[j] + i) % 24; // 计算会议在j中心的本地开始时间
                if(x>=9 && x<18){ // 检查会议是否完全在9:00-18:00内(1小时会议,结束时间为x+1)
                    sum += a[j]; // 如果是,累加工程师数
                }
            }
            ans = max(ans, sum); // 更新最大工程师数
        }
        cout << ans; // 输出结果
        return 0;
    }
    
    
    • 1

    信息

    ID
    577
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者