【思考】如何学习

我也不会! 每次在网上想学习新知识的时候,都会经历这么几种过程: 找教程->开始学了一点知识->跟着继续做->卡住了->不想做了->忘完了 找教程->开始学了一点知识->教程做完了->不知道干啥->忘完了 找教程->看不懂->走了 以前我总是将这些归咎于我的智商不够或者是精力不够,从而认为这些是正常情况。毕竟大多数人都是这样,在学习的过程中会碰到这些问题。 比如令我印象深刻的,当初我学习FFT的时候,前前后后理解了大概两周的时间才看懂,我的同学也表示大概花了这么多时间才学会,但是我的两个学弟一个晚自习就看懂了。 自然他们水平是拉我几条街的,比我快很正常,但是一个晚自习和两周的区别也太大了。所以我也问了下他们学FFT的细节,然后我才理解了为什么他们学得这么快。《算法导论》的FFT内容里有范德蒙德矩阵、复数的很多公式、$e^{2\pi i}$啥的,然后我就去一步一步仔仔细细全查清楚缘由,花了很长时间,而且最后还是不甚解,但是学弟表示他们没关注这些细节,看了就略过了,能看懂最后FFT是怎么样的就行了。 这里就引申出了一个非常关键的学习思路上的问题:刨根问底 or 能用就行? 刨根问底 or 能用就行? 一般来说,我们在义务教育阶段都是鼓励我们去刨根问底的。像高中学习的数理知识,课程内容其实非常少,但是考试的难度都非常大,要求学生致力于提高深度而非广度。学会每一道题目的解法而非照抄,这确实是一个刨根问底的行为。但是我们真的刨得够深了吗? 以导数为例,在高中阶段,如果我们背下了所有导数的公式,并且在解题过程中不会因为求导而卡住,这时一般都可以自称“充分掌握了导数知识”了。但是如果要求你对$x^x$进行求导呢?如果你学过微积分,那自然是可以很容易解出来;但是高中的时候,绝大多数人甚至根本想不到去对这样一个看起来非常简单的函数求导。如果这样一道题目出在了考试题里呢? 这里肯定会有人指出:不可能,因为这个不在高考要求范围内! 说到这里其实已经很明确了,我们学习的大多数数理知识,其实都是在一个限定的框架、限定的方法内拓展、延申的,超出这个范围内的知识由于我们知道“不必要掌握”或者“通过已有知识无法拓展”,所以我们不会去钻研它。假如你是个高中求导大师,但是不知道也无从了解$x^x$不能通过高中的那几个公式求导,此时我把这个看起来非常简单的函数抛给你做,想必你会做得非常迷茫。这份迷茫不亚于我们在网上自学时的痛苦。 稍作总结,在这个场景下,阻碍了我们进一步学习的点在于: 我不知道这个问题是不是我现在所掌握的知识框架与方法能够解出的。 我不知道我是否需要解决这个问题才能进入下一步学习。 假如我是个山区的孩子,学完了教科书刷遍了卷子,突然我想到了$x^x$,我发现我解不了,而且老师也不知道,我应该怎么办呢?自然会去怀疑自己的知识存在漏洞,但是不知道是哪里有漏洞,这份不安全感伴随很长一段时间。

【Minecraft】Mod 开发学习日志

前言 打工至今已经差不多快一年了,学到了很多开发知识,但是越往后学到的新知识越少,尤其是今年感觉技术上基本上没有进步。然后最近在玩mc,整合包出了一堆bug也不知道怎么解,想了想还是学一下java开发,顺便看看别人mod怎么做的。同时做个记录,看看能不能拉低mod开发下限(当然基础的编程和搜索引擎使用能力还是必要的。英语的话会初中英语+翻译软件一般也不成问题)。 前置工作 教程可以参考官方文档,里面有非常完善的文档,以及入门教程。 首先我尝试直接用VSCode来搞。然后发现由于墙有些东西装都装不起来,配代理配得不知道哪里有问题,干脆手动安装一波。(我还没确认过是否必须使用对应版本的java,理论上来说是需要的) 首先下载mdk包(MDK = Mod Development Kit)。最好选Recommend版本。 然后下载Gradle。安装过程可以参考这篇文章。安装完之后命令行输入gradle -v能输出版本信息说明装好了。至于Gradle是啥我也不知道,大概是Java依赖管理之类的东西? 把mdk包解压下来,然后点一下gradle.bat,结果它自己装了个gradle…但是上一步的一些设置应该还是有必要的。 还是手动操作一下吧,在该文件夹下运行gradle build。等较长一段时间后,会提示BUILD SUCCESSFUL。 再执行gradle runClient,就会看到MC的客户端成功跑起来了! 编写第一个mod

[ 2019牛客暑期多校训练营(第一场) ] D Parity of Tuples

题目大意:有n个m元组\(v_1, v_2, \cdots, v_n\),第i个m元组\(v_i = a_{i,1}, a_{i,2}, \cdots , a_{i,m}\)。定义\(count(x)\)为这n个m元组中,对所有\(j = 1 \cdots m\)满足\(a_{i,j} \oplus x\)的二进制表示中有奇数个1的m元组的个数。求\(count(x), x = 0 \cdots 2^k – 1\),其中\(1 \leq n \leq 10^5\),\(0 \leq a_{i,j} < 2^k\),\(1 \leq k \leq 20\),\(1 \leq m \leq 10\)。 题解:观察FWHT中的Haramard矩阵,\(H_{ij}=(-1)^{count1(i\ and\ j)}\),其中\(count1(x)\)表示x的二进制表示中1的数量;这和我们题目中要的东西很像。关于这道题目,我们可以发现我们并不需要做什么卷积;也就是说,我们其实并没有在做一个完整的FWHT。做这道题主要用到的是FWHT中的那个Haramard变换矩阵,然后我们有方法在和这个矩阵做矩阵乘法的时候把时间复杂度降到\(O(n\log (n))\),所以做这道题只需要知道\(H_{ij}=(-1)^{count1(i\ and\ j)}\),然后贴个FWHT的板子使做该矩阵乘法的时间复杂度降到\(O(n\log (n))\)就好了(完全不知道WHT是啥的也可以先看一下http://www.zarxdy34.top/?p=203来帮我增加一下访问量)。 为了方便起见,设\(f(x)=(-1)^{count1(x)}\),即x二进制表示下有奇数个1时为-1,偶数个1时为1,\(H_{ij}=f(i \oplus j)\)。由于有如下性质: \[ \begin{aligned} H_{t(x \oplus y)} &=(-1)^{count1(t\…

[ Codeforces Global Round 2 ] [ CF 1119H ] Triple

题目大意:给出 \(x,y,z(0 \leq x,y,z \leq 10^9)\) 以及 \(n\) 个三元组 \((a,b,c)(0 \leq a,b,c < 2^k,,1 \leq k \leq 17)\) , \(a,b,c,x,y,z\) 都是整数,第i个三元组 \((a_i, b_i, c_i)\) 对应着一个含有 \(x\) 个 \(a_i\) , \(y\) 个 \(b_i\) , \(z\) 个 \(c_i\) 的数组。现在要从每个数组中取出一个数,求取出所有数的异或值为 \(0…2^k-1\) 中的每一个数的方案数。 题解:初看题目应该能想到FWHT,但是FWHT显然不能直接做,需要优化。 考虑第 \(i\) 个数组的生成函数 \(F_i\) ,有\[ [x^{a_i}]F_i = x, [x^{b_i}]F_i = y, [x^{c_i}]F_i = z\] 答案即为所有…

[ Codeforces Round #518 ] [ CF 1067D ] Computer Game

题目大意:有\(n\)个副本,副本可以升级,每个副本有三个值\( a_i , b_i , p_i \),其中\(a_i\)表示该副本在升级前通关的奖励,\(b_i\)表示该副本在升级后通关的奖励,\(p_i\)表示通关该副本的概率。玩家总共可以挑战\(t\)次副本,当玩家挑战某一副本成功后,它可以选择任意一个副本升级(当次不享受升级优惠),求能获得奖励的最大期望。数据范围:\( 1 \leq  n \leq 10^5 , 1 \leq t \leq 10^10 , 1 \leq a_i < b_i \leq 10^8 , 0 < p_i < 1\) notice:这篇题解是错的,待修改 题解:如果某一次挑战副本成功了,接下来一定是选择\(b_i \cdot p_i\)最大的那个升级,并一直挑战那个副本。而在此之前,我们肯定只会选择一个最佳的副本一直挑战。如果升级前挑战的副本为i,升级后挑战的副本为j,那么有\[ ans = \sum_{k=1}^{t}{(1-p_i)^{k-1} ( a_i + (n-k)p_j \cdot b_j )} \] 设\( p = p_i , q = 1…

[ North American Invitational Programming Contest 2018 ] Flashing Fluorescents

题目大意:有n盏灯\( ( 1 \leq n \leq 16 ) \),编号为1到n,每一秒可以按下某一盏灯的开关。如果在某时刻\(t\)按下第\(i\)盏灯的开关,第t+k时刻第i+k盏灯的状态就会被改变。现给出n盏灯的初始状态,求至少要多久灯才会全部变亮。 题解:考虑每个操作对灯状态的影响,用01来表示灯的灭和亮两个状态,可以发现每个操作相当于对灯的某一区间取反。另外答案一定小于等于n。 枚举答案,然后对状态进行一次长度为ans的操作(这里进行的操作实际上是从刚开始就进行的,并不是枚举第ans时刻在哪个位置按下开关),状压DP即可。