5 条题解

  • 0
    @ 2025-12-7 17:02:28

    /**

    • 核心逻辑: 模拟分裂过程。
    • 注意事项:
      1. 细胞数量会达到 1e12,超过了 int (2e9) 的范围,必须用 long long。
      1. 初始状态是 Day 1, Gen 1。
      1. 每次分裂:Day += 7, Gen += 1, Count *= 2。 */

    #include <bits/stdc++.h>

    using namespace std;

    // 定义常量 const long long LIMIT_CLINICAL = 1e9; // 10亿 const long long LIMIT_LETHAL = 1e12; // 1万亿

    int main() { // 优化 I/O 速度 // ios_base::sync_with_stdio(false); // cin.tie(NULL);

    long long n;
    cin>>n;
    
    // 当前状态初始化
    long long current_cells = n;
    int day = 1;
    int generation = 1;
    
    // 用于存储结果的变量
    int ans_a_day = 0, ans_a_gen = 0;
    int ans_b_day = 0, ans_b_gen = 0;
    
    // 标记是否已经记录过达到1e9的情况
    bool reached_clinical = false;
    
    // 检查初始状态是否已经满足条件 (虽然题目范围n<1000不会触发,但为了严谨)
    if (current_cells >= LIMIT_CLINICAL) {
        ans_a_day = day;
        ans_a_gen = generation;
        reached_clinical = true;
    }
    if (current_cells >= LIMIT_LETHAL) {
        // 如果初始就达到1e12,直接输出并结束
        cout << day << " " << generation << " " << day << " " << generation << endl;
        return 0;
    }
    
    // 开始模拟分裂
    // 只要没达到致死量,就继续分裂
    while (current_cells < LIMIT_LETHAL) {
        // 进行一次分裂
        current_cells *= 2; // 数量翻倍
        day += 7;           // 时间过了一周
        generation += 1;    // 代数+1
    
        // 检查是否达到临床检测点 (1e9)
        if (!reached_clinical && current_cells >= LIMIT_CLINICAL) {
            ans_a_day = day;
            ans_a_gen = generation;
            reached_clinical = true; // 锁定状态,防止后续循环覆盖
        }
    }
    
    // 循环结束时,意味着已经达到了 LIMIT_LETHAL
    ans_b_day = day;
    ans_b_gen = generation;
    
    // 输出结果
    cout << ans_a_day << " " << ans_a_gen << " " << ans_b_day << " " << ans_b_gen << endl;
    
    return 0;
    

    }

    信息

    ID
    19233
    时间
    10000ms
    内存
    32MiB
    难度
    10
    标签
    递交数
    10
    已通过
    3
    上传者