当前位置: 首页 > news >正文

一道名题-(csp 儒略日)的心得与技巧

这道题,我做了三年,平均每年做一次,我来讲讲我的心得。

读题

题面很长,细节很多,我们需要耐心细心的读,此时多花一点时间是划得来的。

我们得出大致关系如下

 

历法公历日常用历儒略历公元前公元后历法公历日常用历儒略历公元前公元后历法{公历(日常用历)儒略历{公元前公元后

我们对公历都有一定的了解吧,比如 平年十二个月的天数, 比如小学教的 “一三五七八十腊”,四年一闰百年不闰四百年又闰,这些宝贵的经验将成为我们解题的关键说的呢。

格里高利相较于公历其实更为简单,因为太简单不准所以才改的嘛 ,就是闰年的计算规则不同,是每四年一闰。

解题

首先,这是一道人尽皆知的模拟题。模拟的概念太笼统了,实现起来也八仙过海,我来讲讲我觉得最适合入手这道关于日期的大模拟。

解题的方向

我们要想着化繁为简,一个劲的分类讨论不见得总是好事(我第一次就这么G的)。

多想想在 coding , 写代码的时间总是小于调 bug 的时间的。

我的思路

我们发现,将日期分为儒略历和公历是比较好的,将公元前的日期归化到儒略历的一部分,不用特殊处理,具体来讲,将公元前的日期年份 y −>  −y+1 比如BC 4713 变为 -4712 ,这阳处理闰年也方便。

我们来算一下儒略历一共多少天

首先公元前天数 365 * 4713 + 4713 / 4

公元后的天数1581 * 365 + 1581 / 4 + 277 1582(不含)年以前的和1582年的277天。

总共 2299160 天。

对于较简单的儒略历,我们可以直接算

int y = -4712, m = 1, d = 1;if (x <= Ru) {y += x / (_1 * 4 + 1) * 4;x %= (_1 * 4 + 1);while(x >= (_1 + (y % 4 == 0))) x -= (_1 + (y % 4 == 0)), y++;while(x >= (M[m] + (m == 2 && y % 4 == 0))) x -= (M[m] + (m == 2 && y % 4 == 0)), m++;d += x;if (y < 1) {cout << d << ' ' << m << ' ' << 1 - y << ' ' << "BC" << endl;} else {cout << d << ' ' << m <<' ' << y << endl;}}

代码中(M[m] + (m == 2 && y % 4 ==0) 是处理闰年的二月日期(28->29)

注意的是, 1 1 4713 BC 是第0天

对于周期的存储,我们可以这样//公历下

int _1 = 365, _4 = 4 * _1 + 1, _100 = 25 * _4 - 1, _400 = _100 * 4 + 1; //100,400是公历下的
int M[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

对于公历, 我们考虑将1582 10 15 到 1982 10 14日这400年打一个小表,这样极大简化了我们的计算量

else {x -= Ru;y = 0;y += x / _400 * 400; x %= _400;cout << a[x].d << ' ' << a[x].m << ' ' << y + a[x].y << endl;  }

其中a是打出来的表,a[x]是四百年中的第几天,10月15 日算第一天。

那么,怎么打出这个表?

答:用手打 可以用结构体。

struct dt{int y, m, d;dt(){}dt(int _y, int _m, int _d) {y = _y, m = _m, d = _d;}
}a[maxn], be = {1582, 10, 15};

然后四百年迭代一遍

 dt v = be;for (int i = 1; i <= _400; i++) {a[i] = v;nxt(v);}

我们只需处理简单的一天的日期跳转

void nxt(dt &x) {x.d++;if (x.d > (M[x.m] + ck(x))) {x.d -= (M[x.m] + ck(x));x.m++;}if (x.m > 12) {x.m = 1;x.y++;}
}

ck 是处理闰年二月

bool ck(dt x) {if (x.y % 4 == 0 && x.y % 100 != 0 || x.y % 400 == 0) {return x.m == 2;} else return 0;
}

于是,我们便做完了这道大模拟。

相关文章:

一道名题-(csp 儒略日)的心得与技巧

这道题&#xff0c;我做了三年&#xff0c;平均每年做一次&#xff0c;我来讲讲我的心得。 读题 题面很长&#xff0c;细节很多&#xff0c;我们需要耐心细心的读&#xff0c;此时多花一点时间是划得来的。 我们得出大致关系如下 历法公历日常用历儒略历公元前公元后历法公历…...

单元测试之- mock工具mockito

常用的mock工具mockito 在编写单元测试时&#xff0c;需要mock依赖的对象&#xff0c;减少依赖对象对测试的影响&#xff0c;Mocktio是常用的mock工具之一&#xff0c;那么mockito提供了哪些功能呢&#xff1f; Mock对象的创建和配置&#xff1a;Mockito可以通过简单的语法创建…...

03 线程间共享数据

unique_lock 因为unique_lock类也具有成员函数lock&#xff0c;unlock&#xff0c;trylock&#xff0c;它含有一个内部标志&#xff0c;表明关联的互斥是否正在被使用&#xff0c;此标志可以通过调用成员函数owns_lock()查询。 1 在初始化过程中保护共享数据 延迟初始化 ( l…...

题目:2264.找到一个数字的 K 美丽度

​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;2269. 找到一个数字的 K 美丽值 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 使用滑动窗口遍历判断&#xff0c;窗口中放置 k 个数字&#xff0c;每次后移一位。 解题代码&#xff1a; c…...

分布式ID性能评测:CosId VS 美团 Leaf

环境 MacBook Pro (M1)JDK 17JMH 1.36运行在本机 Docker 内的 mariadb:10.6.4 运行 CosId SegmentChainId 模式&#xff0c;基准测试代码&#xff1a; Benchmarkpublic long generate() {return segmentChainId.generate();}Leaf 基准测试代码&#xff1a; Benchmarkpublic l…...

MySQL数据库安装(二)

夕阳留恋的不是黄昏&#xff0c;而是朝阳 上一章简单介绍了MySQL数据库概述(一), 如果没有看过, 请观看上一章 一. MySQL 卸载 一.一 停止MySQL服务 在卸载之前&#xff0c;先停止MySQL8.0的服务。按键盘上的“Ctrl Alt Delete”组合键&#xff0c;打开“任务管理器”对话…...

通过MySQL删除Hive元数据信息

之前遇到过一个问题&#xff0c;在进行Hive的元数据采集时&#xff0c;因为Hive表的文件已经被删除了&#xff0c;当时是无法删除表&#xff0c;导致元数据采集也发生了问题&#xff0c;所以希望通过删除Hive表的元数据解决上述问题。 之前安装时&#xff0c;经过特定的配置后…...

在电脑如何翻译文件名称并同时保存原文件名和新文件名称

不知道大家在日常工作中有没有遇见到文件名英语或其他评论文字需要翻译成中文呢&#xff0c;翻译成中文后&#xff0c;需要把原来文件名称一起保存下来&#xff0c;呈现上新文件名上。也是通俗的说法&#xff0c;新文件名称也有原文件名称在呢。这个就有点难度吧。一般我们常见…...

Modbus协议简介与常用测试指令说明

DateAuthorVersionNote2022.07.19Dog TaoV1.01. 完成了文档的撰写。2023.08.04Dog TaoV1.21. 修订文档&#xff0c;增加了Modbus协议简介小节。 本文档提供ModbusPoll调试软件与官方部署文档合辑资源&#xff08;CSDN平台&#xff09;。 文章目录 Modbus协议简介发展历史主要技…...

EXCEL里数值列如何显示序号?如何重新排序? 怎么取得排序后的序号?

目录 1 EXCEL里如何显示序号&#xff1f; 2 如何重新排序&#xff1f; 3 怎么取得排序后的序号&#xff1f; 3.1 rank() 的序号可能不连续 3.2 方法2&#xff1a;SUMPRODUCT((C7>C$7:C$12)/COUNTIF(C$7:C$12,C$7:C$12))1 EXCEL里如何显示序号&#xff1f;如何重新排序…...

kubernetes 集群利用 efk 收集容器日志

文章目录 [toc]前情提要制作 centos 基础镜像准备 efk 二进制文件部署 efk 组件配置 namespace配置 gfs 的 endpoints配置 pv 和 pvc部署 elasticsearchefk-cmefk-svcefk-sts 部署 filebeatfilebeat-cmfilebeat-ds 部署 kibanakibana-cmkibana-svckibana-dp使用 nodeport 访问 …...

安防视频监控汇聚平台EasyCVR在移动端火狐浏览器中云台显示的优化

安防监控视频EasyCVR视频融合平台基于云边端一体化架构&#xff0c;具有强大的数据接入、视频监控汇聚、处理及分发能力&#xff0c;平台能对前端接入设备进行统一集中管理&#xff0c;支持采用设备树对设备进行分组、分级管理&#xff0c;支持设备状态监测、云端运维等功能&am…...

selenium官文文档阅读总结(day 3)

1.关联型xpath的用法 driver.find_element(By.XPATH,//a[text()"xxx"]/ancestor::祖先元素的标签名//……) 2.selenium等待 等待的作用 &#xff1a;在系统运行的过程中&#xff0c;等待网页内容的加载显示。需要耗费的时间&#xff0c;与网络速度、接口的复杂程度…...

【pandas百炼成钢】数据预览与预处理

知识目录 前言一、数据查看1 - 查看数据维度2 - 随机查看5条数据3 - 查看数据前后5行4 - 查看数据基本信息5 - 查看数据统计信息&#xff5c;数值6 - 查看数据统计信息&#xff5c;非数值7 - 查看数据统计信息&#xff5c;整体 二、缺失值处理8 - 计算缺失值&#xff5c;总计9 …...

怎么查到企业的供应商和客户?

企业的供应商和客户是什么&#xff1f; 其实不需要过多介绍&#xff0c;我们对供应商和客户都有自己的理解&#xff0c;供应商就是负责企业产品的供应&#xff0c;企业从供应商那里买材料进行加工得到的产品&#xff0c;卖给客户。 官方来说供应商是向企业和竞争对手提供各种…...

智能物流千人俱乐部---行业必备神器

千人俱乐部前两天正式推出了。 智能物流千人俱乐部详情 很多行业内的甲方和乙方的朋友过来问&#xff0c;这个千人俱乐部到底怎么玩&#xff1f;今天再来解释一下。 1、为什么搞这个千人俱乐部&#xff1f; 一个原因是&#xff1a;研习社天天都有甲方粉丝让推荐设备厂家&#x…...

uniapp uview文件上传的文件不是文件流,该如何处理?用了uni.chooseImage预览功能要如何做

在使用uniapp开发&#xff0c;运用的ui是用uview&#xff0c;这边需要做一个身份认证&#xff0c;如下图 使用的是uview的u-upload组件&#xff0c;可是这个组件传给后端的不是文件流 后端接口需要的是文件流格式&#xff0c;后面使用了uniapp的选择图片或者拍照的api&#x…...

pktgen-dpdk arm编译问题 “Platform must be built with RTE_FORCE_INTRINSICS“

编译报错 /usr/include/rte_atomic_32.h:9:4: error: #error Platform must be built with RTE_FORCE_INTRINSICS解决办法&#xff1a; 我是在 arm架构服务器上编译出现这个&#xff0c;要定义 RTE_FORCE_INTRINSICS 在meson.build中 增加gcc编译参数 add_project_arguments(…...

用html+javascript打造公文一键排版系统12:删除附件说明中“附件:”里的空格

如果我们在输入附件说明时在“附件&#xff1a;”之间加入空格&#xff0c;那么排版时就要删除这些空格。 因为string对象replace()支持正则表达式&#xff0c;于是考虑用replace()来完成。 写了一段只有一个多余空格的代码来测试&#xff1a; <!DOCTYPE HTML> <HT…...

容器技术:Docker搭建(通俗易懂)

目录 Docker搭建环境准备Docker安装1、查看服务器是否安装Docker2、卸载Docker3、安装Dokcer依赖环境4、配置Docker国内阿里云镜像5、安装Docker6、查看Docker信息7、配置阿里云镜像加速8、镜像安装10、运行实例11、查看实例状态12、测试 Docker命令集合 Docker搭建 环境准备 …...

嘉立创EDA PCB设计中的高效对齐与等间距技巧

1. 嘉立创EDA对齐功能深度解析 第一次用嘉立创EDA做PCB设计时&#xff0c;最让我惊喜的就是它的对齐功能。相比其他EDA软件需要反复调整网格对齐&#xff0c;这里只需要选中元件就能一键对齐。记得当时画一个LED阵列板&#xff0c;20多个LED灯珠手动调整位置花了我半小时&#…...

3分钟搞定:YaeAchievement让你告别手动记录原神成就的烦恼

3分钟搞定&#xff1a;YaeAchievement让你告别手动记录原神成就的烦恼 【免费下载链接】YaeAchievement 更快、更准的原神数据导出工具 项目地址: https://gitcode.com/gh_mirrors/ya/YaeAchievement 还在为《原神》数百项成就的手动整理而头疼吗&#xff1f;YaeAchieve…...

基于CNN增强的Qwen3-ForcedAligner-0.6B:语音特征提取优化实践

基于CNN增强的Qwen3-ForcedAligner-0.6B&#xff1a;语音特征提取优化实践 1. 引言 语音识别技术在日常生活中的应用越来越广泛&#xff0c;从智能助手到会议转录&#xff0c;都离不开精准的音频文本对齐。但在实际应用中&#xff0c;我们常常遇到这样的问题&#xff1a;背景…...

MiniMax M2.7 自进化智能体模型

当Anthropic将Claude Mythos锁在门后时&#xff0c;上海的一家实验室却做了相反的事。MiniMax今天开源了M2.7的权重——而这个模型带来了一项能力&#xff0c;它从根本上改变了我们对AI开发的思考方式。 M2.7&#xff0c;据MiniMax称&#xff0c;是业界首个"自进化"…...

Kook Zimage真实幻想Turbo效果炸裂!高清梦幻人像作品集首发

Kook Zimage真实幻想Turbo效果炸裂&#xff01;高清梦幻人像作品集首发 1. 梦幻人像生成新标杆 当第一次看到Kook Zimage真实幻想Turbo生成的作品时&#xff0c;我作为一个从业多年的数字艺术创作者&#xff0c;也不禁为它的表现力所震撼。这款基于Z-Image-Turbo底座的幻想风…...

Rust async trait 实现分析

Rust async trait 实现分析 Rust作为一门现代系统编程语言&#xff0c;凭借其内存安全和高性能特性广受开发者青睐。异步编程在Rust中的实现一直是一个复杂且充满挑战的领域&#xff0c;尤其是async trait的实现。本文将深入分析Rust中async trait的实现机制&#xff0c;帮助开…...

大厂Java面试全流程故事:微服务架构、消息队列、缓存与AI Agent在内容社区场景的深度剖析

大厂Java面试全流程故事&#xff1a;微服务架构、消息队列、缓存与AI Agent在内容社区场景的深度剖析 故事场景 谢飞机&#xff08;幽默水货程序员&#xff09;走进互联网大厂面试&#xff0c;面试官以“内容社区与UGC”为主线&#xff0c;三轮递进考察微服务架构、缓存、数据库…...

AIGlasses_for_navigation开发利器:VS Code与Jupyter Notebook环境配置

AIGlasses_for_navigation开发利器&#xff1a;VS Code与Jupyter Notebook环境配置 如果你正准备上手AIGlasses_for_navigation项目&#xff0c;或者任何类似的智能硬件与AI结合的项目&#xff0c;那么一个趁手的开发环境就是你的第一把武器。今天咱们不聊复杂的算法&#xff…...

Qwen3.5推理模型应用:打造你的个人学习辅助与解题分析工具

Qwen3.5推理模型应用&#xff1a;打造你的个人学习辅助与解题分析工具 1. 模型介绍与核心能力 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个专为推理任务优化的轻量级AI模型。基于Qwen3.5-4B架构&#xff0c;通过蒸馏技术强化了其逻辑分析和分步骤解答能力。这…...

SEER‘S EYE预言家之眼网络通信优化:解决高延迟环境下的实时推理挑战

SEERS EYE预言家之眼网络通信优化&#xff1a;解决高延迟环境下的实时推理挑战 想象一下&#xff0c;你正在一场紧张的游戏对局中&#xff0c;将关键画面截图发送给AI助手“预言家之眼”&#xff0c;希望它能瞬间给出敌方英雄的技能冷却时间或下一步行动预测。但屏幕上的加载图…...