#P1004. 主观人生长度
主观人生长度
Background
你是否曾感觉:童年漫长如史诗,而成年后时间却如白驹过隙?
这并非错觉——心理学研究表明,人对时间的主观感受与已活过的年龄成反比。
这就是著名的“对数时间感知模型”:一年对你而言有多“长”,取决于你已经活了多少年。
5岁时,1年是你生命的1/5,无比漫长;
50岁时,1年只是你生命的1/50,转瞬即逝。
因此,若以主观体验衡量人生进度,人生并非线性流逝,而是对数式压缩的。
有俗语云:“18岁是人生的中点”——这正是基于从3岁起形成记忆、寿命100岁的对数模型推导出的经验结论!
Description
给定你的出生年、月、日,请计算截至当前系统日期,你的主观人生已经过去了百分之几。
我们采用如下模型:
- 假设人类寿命为100岁;
- 3岁之前无清晰时间感知,主观人生从3岁生日开始计算;
- 主观人生进度 与当前年龄 (单位:年,带小数)的关系为:$$y = \frac{\ln(x / 3)}{\ln(100 / 3)} \quad (3 < x < 100)$$
- 若 ,则 ;
- 若 ,则 。
请输出 ,保留两位小数,格式如 50.00%。
Format
Input
一行,三个整数 birth_year birth_month birth_day,表示你的出生日期。
保证输入为合法公历日期(如不会出现2月30日),且不晚于当前系统日期。
Output
一行,一个字符串,表示主观人生已过百分比,保留两位小数,末尾带百分号 %。
例如:51.10%
Samples
2008 1 16
51.10%
样例说明:假设今天是2026年1月16日,则你正好18岁。
$$y = \frac{\ln(18 / 3)}{\ln(100 / 3)} = \frac{\ln 6}{\ln(100/3)} \approx \frac{1.7918}{3.5066} \approx 0.5110$$
代入公式:故输出
51.10%。
2023 5 1
0.00%
样例说明:若今天是2026年1月16日,你尚未满3岁,主观人生尚未开始。
1920 1 1
100.00%
样例说明:年龄已超100岁,主观人生已结束。
Limitation
时间限制:1秒,内存限制:128MB。
程序需在运行时获取真实系统当前日期,不得使用固定日期。
Hint
本题已配置Special Judge,输出答案与标准答案相差不超过0.01%就可以获得Accepted。
下面是 带详细注释的 C++ 示例代码,专门展示如何获取当前系统的年、月、日:
#include <iostream>
#include <ctime> // 必须包含此头文件才能使用时间函数
int main() {
// 1. 获取当前时间的时间戳(从1970年1月1日0点至今的秒数)
std::time_t now = std::time(nullptr);
// 2. 将时间戳转换为本地时间结构体(struct tm)
// localtime 函数会根据你电脑的时区自动调整
std::tm* localTime = std::localtime(&now);
// 3. 从 struct tm 中提取年、月、日,并转换为常规格式
// 注意:tm_year 是从 1900 年开始算的,所以要加 1900
int currentYear = localTime->tm_year + 1900;
// 注意:tm_mon 的范围是 0~11(0 表示一月),所以要加 1
int currentMonth = localTime->tm_mon + 1;
// tm_mday 已经是 1~31,直接使用即可
int currentDay = localTime->tm_mday;
// 4. 输出当前日期(可选,用于调试)
std::cout << "当前日期: " << currentYear << "-"
<< (currentMonth < 10 ? "0" : "") << currentMonth << "-"
<< (currentDay < 10 ? "0" : "") << currentDay << std::endl;
return 0;
}
在 C++ 中,自然对数(ln) 使用标准库函数 std::log() 计算。
✅ 用法说明
#include <cmath> // 必须包含此头文件
double x = 6.0;
double ln_x = std::log(x); // ln(6) ≈ 1.791759
🔔 注意:
std::log()是 自然对数(以 e 为底),即数学中的 ln;- 不是
log10(常用对数,以 10 为底);- 不是
log2(以 2 为底)。
📌 常见对数函数对比(都在 <cmath> 中)
| 函数 | 含义 | 数学符号 |
|---|---|---|
std::log(x) |
自然对数 | |
std::log10(x) |
常用对数 | |
std::log2(x) |
二进制对数 |