Ziqian Chen
@Ziqian_Chen

Ziqian Chen
@Ziqian_Chen
-
建议川川来🚪作线上讲座
Post #8 ❤️ 4 likes -
问问专业?
腾讯是来过 XJTU 的,但他们一般春季来宣传实习,并且是单独的教室宣讲,不和外面摆摊的搞在一起。
米哈游也在西安搞过宣讲会,可能没来 XJTU,是在某个酒店办的,整挺好,如果是 mhy 玩家应该很喜欢。
游戏三大块,美术的话我估计你不是艺术生,策划的话学历要求高,我估摸着 XJTU 对上米和鹅可能会拖后腿。程序可能容易一点,分类和传统互联网差不多,客户端,后端,测试,数据之类的。建议好好学,多实习,努力 fit 岗位要求。
Post #7 -
最近发现了 CRTP 的一个神秘应用。
考虑如下一种很常见的场景,你有一个很复杂很复杂的类 D,你尝试将其划分出以下模块:
- 共享信息 A,这部分信息在其他功能模块(B 和 C)都需要使用
- 功能模块 B
- 功能模块 C
- 功能模块 B 和 C 之间的交互和整体接口,称为 D
为了防止你把一大坨屎山拉在一个文件内,你决定
每个文件各拉一坨把他们拆分到不同的文件里去实现。既然你使用了 C++,你希望这个划分满足零开销抽象原则,也就是在时间上和空间上不引入额外的开销。我们考虑以下几种方法:
- .h 和 .cpp
C++ 可以把声明放在 .h 中,实现放在不同的 .cpp 里,只要合理拆分 .cpp 那么理论上是可行的,但是这个还是很丑陋,比如你要编译就得把所有 .cpp 丢进编译器(只 include.h 会链接失败)。以及函数声明仍然一坨摆在一个文件里。
另外分离接口和实现会阻止某些优化,你需要开启 -flto 启用跨文件优化。
- 拆成四个类然后多继承
写一个公共类 A,B 和 C 继承 A 并且 D 多继承 B 和 C。
这种方法的问题在于出现了菱形继承,于是你会发现 A 的成员变量在 D 中出现了两次,这很不好,不仅导致了歧义还浪费了空间。
- 加上虚继承
加上虚继承解决了空间上的浪费,但很不幸,引入了虚表。这导致时间上的浪费。
- 最终解决方法:CRTP
说到底,实际上你只需要拿到一个指向共有信息 x 的指针,如果你把共有信息写在 A 中并使用多继承,那么无论是时间还是空间总得有地方妥协,因为 C++ 需要保证 B 和 C 的可用性(但你实际上并不会单独使用 B 和 C)。
所以不妨把共有信息写在 D 中,然后通过 CRTP 的方式拿到 D 的指针进行操作。
Post #25 ❤️ 1 like -
oj 是好文明,建议推广
Post #4 ❤️ 1 like -
Post #3 -

有感而发
Post #15 ❤️ 3 likes -
建议学习官僚的智慧:我白天有课,只有晚上有空,这 x 个晚上我只看 x 次,看完就交给老师,不合格的请自行补交给老师。
Post #8 ❤️ 2 likes -
有没有可能,这是愚人节比赛,大家做着玩的。。。
Post #3 ❤️ 1 like -
你妹提优点
Post #17 - Post #15
-
leetcode 和 世界级编程竞赛选手 之间隔得有点远
Post #4 -
面就完事了。
是 qd 还是 qr 啊?
Post #7 ❤️ 1 like -
自动化是这样的,不知道现在还有没有考试手写代码。
Post #7 -
建议从 c++ 开始学,虽然 oi 也只需要 C with class and STL
Post #3 -
木有。以及你不是美本了吗 🤣
Post #4 -
找实习需要 fit 岗位需求的能力和从小实习滚雪球到大实习的时间精力
Post #10 -
打了四年 ACM,远没有川川那位打的好,已经退役了。。
Post #27 -
太牛了,楼主分享一点经验吧,射射楼主。
Post #11 ❤️ 1 like -
物理系对口的都是啥样的企业啊?
Post #23 -
暑假来 acm 小学期玩玩
Post #147 -
所以,为什么需要读研呢?先问是不是,再问怎么做。
Post #80 -
关于存图的数据结构,本质上可以这么考虑:
对于单个点的常见操作包括:
1.判断这点是否和另外一个点连边
2.枚举这点的连边。比如求最短路径算法里面实际上只需要第二种操作即可。
一张图就是 n 个点的数据结构绑在一起。
这样考虑的话,可以分成两种,一种是基于桶的方法,用一个大小为 n 的数组标记每个点是否和这个点连边。对应的存图方法就是邻接矩阵。这种方法比较适合第一种操作(O1 复杂度),但是不适合第二种(On)。
一种是基于线性表的方法,用一个数组或者链表,只记录连边的节点。对应的存图方法就是 vector(邻接数组表),或者链式前向星(本质上是邻接链表,使用预先分配的内存池)。这种方法比较适合第二种操作(Ow 复杂度,w 是连边数量),但是不适合第一种(Ow,同上)。
理解这个就可以了,甚至可以进行改造,比如把 vector 排序通过二分查找降低第一种操作的复杂度,通过平衡树或者哈希表实现动态删除插入边。
Post #45 ❤️ 4 likes -
大一下就开始刷题啦,后续打算打竞赛?
Post #43