5 条题解
-
0
/**
- 核心逻辑: 模拟分裂过程。
- 注意事项:
-
- 细胞数量会达到 1e12,超过了 int (2e9) 的范围,必须用 long long。
-
- 初始状态是 Day 1, Gen 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
- 上传者