Fifnmar

Fifnmar : Java IO 思想的简单笔记
3 年,9 月前

[TOC] 写在前面 这篇文章只是大概讲解 Java IO 设计背后的逻辑和思想,结合了一点点历史,但并不直接讲 Java IO 的内容和使用方法。本文的目的在于帮助学习者理清学习脉络。 IO 的特点 IO, Input/Output,泛指程序的输入输出,即一个程序与外交流的功能。这样基础的功能,其重要性不言而喻。这里我总结 IO 功能的特点如下: 形式多变。外界输入可能是二进制形式,也可能是文本形式。前者可能便于机器存储与使用,后者更适合人类阅读与干预。如果是文本形式,IO 组件需 ...查看全文
Fifnmar : 我学习 C++20 的一点感想
3 年,9 月前

刚才正式学习了 C++20 的很多东西。这太强了!我甚至觉得 Concepts 的引入使得所谓「接口」黯然失色(当然纯动态情况下还是得用那一套)!它不但将原来反人类的模板变成了傻瓜式操作,还直接引入了近乎完美的静态反射 (Static Reflection) 与非侵入式的静态多态 (Non-Invasive Static Polymorphism)。一个最直接的例子就是 Ranges Library,它使得函数式风格的代码在 Plain C++ 中也可以自然写出[1]。Concepts 是真正的新基石,与以 ...查看全文
Fifnmar : STL 容器空间利用率的简单探究
3 年,10 月前

最近在一个场景中对使用 std::deque 还是 std::forward_list 作为小对象分配器的问题产生了思考。首先,抛去内存使用量的问题, deque 一定是更胜一筹。不如说,本来这个容器就是被设计为可以用作 batch 化的小对象容器的。另一方面, deque 支持常数时间内随机访问,如果不另用什么索引容器的话,几乎只能用它了。 我当时对 deque 的空间占用起了兴趣。因为 deque 内的元素按 page 分散地存储,再加上内部维持了一个小型的映射表,所以其空间利用率可 ...查看全文
Fifnmar : [EOJ 2980] 小数转化分数
3 年,11 月前

我还没学编译原理,听说那里有很多相关的知识;所以现在我就用笨方法解这种题了。这也是我现在不太爱做这种题的原因…… 我的想法是这样的:可以把各种小数抽象为一类: struct NumSection { u64 val = 0 ; u64 len = 0 ; }; struct CyclicNum { NumSection front_part ; NumSection cyclic_par ...查看全文
Fifnmar : [EOJ 1837] 小强的烦恼
3 年,11 月前

要好好理解「敌人的敌人是朋友」这句话。重点分析一下把 add_rival(a, b) 的正确性。其实应该分四种情况讨论,但像我这么写的话就避免了显式的 if 判断(虽然有一定性能损失)。 void add_rival ( u64 const a , u64 const b ) { connect ( a , real_rival_of ( b ). value_or ( a )); // real_rival_of returns an optio ...查看全文
Fifnmar : Extended Euclid
4 年,1 月前

Extended Euclid 欧几里得算法是求最大公约数常用的递归算法。 int gcd ( int a , int b ) { return b == 0 ? a : gcd ( b , a % b ); } 根据 Bézout’s Identity, 方程 $$ ax+by=\gcd(a, b)\tag1 $$ 必有整数解。 思考通过使用递归来解决这个问题。 首先,base case 是 b ...查看全文
Fifnmar : C++ 算法库中一些鸡肋的东西……
4 年,1 月前

我发现很多时候,没有必要使用算法库里的一些东西。使用的话看起来有单词,好像有点易于理解,不过其实手写起来也不难。可能,在大一点的程序里它会有用?(疑惑) ...查看全文
Fifnmar : 牛刀小试:程序设计能力实训 1041
4 年,1 月前

我在这道简单题中应用了一些标准库设施。 其中, inner_product 本来是 transfrom_reduce ,但我们 OJ 的 C++17 竟然没有!它支持不完全可还行。所以我换了。 template < typename F > inline void repeat ( uint32_t const times , F func ) { for ( uint32_t i = 0 ; i < times ; ...查看全文
Fifnmar : 尝试深入 STL <algorithm>
4 年,1 月前

我发现 algorithm 是 C++ 提供的一个非常好用的抽象。 我决定多多使用它,试试怎么样。 ...查看全文
Fifnmar : 我对 C++ IO 的新思考
4 年,1 月前

以前,我一直坚持使用 C 的输出和 C++ 的输入。但最近我的想法产生了改变。 随着对 C++ 的使用和了解一点点加深,我开始理解它的一些设计哲学。而且,我发现大部分情况下 ostream 还是很好用的。再说,如果我连 map 都可以忍受,对 ostream 也能加以理解。 ostream 有一些独特的功能,包括和 <algorithm> 库相搭配,而这些是我没有深入了解过的。 一点题外话,C++ 像一罐烈酒,一开始喝又辣又刺,但慢慢回味才能理解其中的深意。 渐渐地,我放弃 ...查看全文
Fifnmar : 3061.题解
4 年,1 月前

大体划分 解决问题的基本思路,是从抽象到具体、从整体到局部。现在,我们先思考:为了解决这个问题,可以大致把它分成几步: 输入 Morse Code 文本 切段,基本上每一段对应一个字符 翻译,查询 Morse -> Plaintext 字典,把切段翻译成明文。 输出 Plain text 文本。 这样看上去,只有中间两步需要我们细细考虑。 分析重点、细化决策 功能实现起来往往没有一开始想象得那么简单,因为我们可能遇到各种特殊要求。我们还应该对「边界情况」(Corn ...查看全文
Fifnmar : 整数上取整平方根
4 年,1 月前

今天早上一个同学跟我探讨了一个有趣的问题: 「只用整数,用二分法求出一个整数的平方根,如果结果不是整数则向上取整。」 因为想要的是 $\lceil \sqrt{n} \rceil$,所以二分的时候要考虑明白退出条件。 所求得的根 $m$ 应该满足这个要求: $$ (m - 1)^2 < n \le m^2 $$ 但实际写代码的时候请注意到乘法可能溢出,所以改写成这个样子: $$ \begin {cases} m - 1 < \frac{n}{m-1} \ m \ge \f ...查看全文
Fifnmar : [97. 邮件地址排序] 代码
4 年,1 月前

讨论区放不下,有点长了。但我得吐糟一下,为什么 OJ 会直接吞了我辛苦写的东西 Orz 刚看这道题的时候,我好奇为什么是道 Hard 难度的题。现在看应该是因为数据量吧。 #include <algorithm> #include <cassert> #include <cstdint> #include <iostream> #include <string> #include <vector> class Email { ...查看全文
Fifnmar : **[Luogu P1346]** 经验总结
4 年,1 月前

题目描述 在一个神奇的小镇上有着一个特别的电车网络,它由一些路口和轨道组成,每个路口都连接着若干个轨道,每个轨道都通向一个路口(不排除有的观光轨道转一圈后返回路口的可能)。在每个路口,都有一个开关决定着出去的轨道,每个开关都有一个默认的状态,每辆电车行驶到路口之后,只能从开关所指向的轨道出去,如果电车司机想走另一个轨道,他就必须下车切换开关的状态。 为了行驶向目标地点,电车司机不得不经常下车来切换开关,于是,他们想请你写一个程序,计算一辆从路口 A 到路口 B 最少需要下车切换几次开关。 ...查看全文
Fifnmar : 程序能力实训 1052 代码 and 一点吐糟
4 年,1 月前

/*/////////////////////////////////////////////////////*/ #include "bits/stdc++.h" /* PreCondition: h is a head pointer of a linked-list PostCondition: return the head pointer of the sorted linked-list */ NODE * SortRationalList ( NODE * ...查看全文
Fifnmar : 随机算法:Random_shuffle 的一种实现
4 年,2 月前

之前学习过 Linear Conguential Generator, LCG 的实现,觉得很有意思。今天又看到了,并学习了一番著名的「洗牌算法」。 Linear Congruential Generator LCG 使用一个递归定义: $$ X_n = (aX_{n-1} + c) \mod m $$ C++ 标准库在 <random> 中提供了相应 Linear Congruential Engine: template < typename UIntType ...查看全文
Fifnmar : 「图算法」最短路径
4 年,2 月前

下面是对我学习这个部分的一点小总结 我觉得,我学习最短路径这个部分的时候有点忘记了我之前定下来的方针:「先知其所以然,再探究背后思想」。我之所以这么说,是因为我想,前辈想出这些经典的算法已经耗费了大量的精力,我直接学习它,然后再揣摩背后的思想,其性价比要优于先自己苦想、再看经典方法。学习图算法的时候,我总是觉得自己有一点想法,并试图实现(结果就是听取 WA 声一片),可以说浪费了很多时间(在这里卡了有一会儿了)。 当然,先行思考可以从失败中得到宝贵的教训;但即使没有先自己摸黑探索,学习经典算法的 ...查看全文
Fifnmar : 【入驻】决定在这里写点博客
4 年,2 月前

一般,我自己写的小东西都是放在自己的电脑上存储的。不过在网络上有个备份也是好的,或许,也有人看呢? 我之前想过租一个阿里云,也不是很贵,再整个域名,搞个自己的小网页。不过目前来看没有足够的动力。正好提供了这样的设施,我就在这里随便写 / 搬运点东西吧! 写 markdown 我还是比较喜欢在 Typora 上写,所见即所得,而且有多种主题可以用,挺舒服的。对于我这样不是专业排版的用户来说,无论是效率还是舒适度都完爆 Microsoft Office Word。 今天就是快乐的第一篇博客啦,这个世 ...查看全文