-
Notifications
You must be signed in to change notification settings - Fork 29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
虚假的每日总结 #69
Comments
2021/01/01题目列表
感想与心得
|
2021/02/01凑数的心得
|
2021/05/08回顾
|
2023/10/19
|
2023/10/20
|
2023/10/21
|
2023/10/23
|
2023/10/26大数开根号。可以用Python快速逃课,见51nod-1166的解法。(不过51nod好卡啊) 对于有内建大整数支持的语言(如Java,Python,golang等),可以使用二分。将x^2==a两边乘10'000,即可得到(100x)^2==10000a,方便获得x的前100位有效数字。 还可以使用牛顿迭代法加速,可以更快速的获得解。传说与泰勒展开相关,但是限制我数学知识的是左脑和右脑(以及泰勒是谁徒弟? |
23/10/29
此题的关键在于看透”不能贪心“的本质,以及打破”用优雅的数学方法直接得到答案“的幻想,直接进入DFS搜索的阶段。 根据数据规模得知,要求的数最多有50000个因子(记作n)。所以其最多有16个质因子(我们将此数记为m),质因子的指数乘积等于n。这里拍脑袋预估时间/空间复杂度为O(m)。 因为解的空间很少,所以我们可以用DFS暴力搜索。这里有一个小技巧,a1^b1 * a2^b2可以转化为b1 * log(a1) + b2 * log(a2),在精度不高的情况下比较两个大数的大小。 最后我们将a1^b1 + a2^b2 ... 表示的大数打印出来,即得到最终解。 LIS变种,让我想起了令人闻风丧胆(其实只有我自己)的北大题。。。 第一问是简单的LIS,经典模型。第二问求有多少种不同的LIS,使用以下方法进行DP转移即可:
例如 小数据范围是一道非常典型的DP题,难度相当于Leetcode Medium。但是大数据需要额外的考虑。 比较直观的做法是离散化,对于距离比较近的点,直接使用+delta(s <= delta <= t)的方法尝试转移。对于比较远的点,使用数学方法判断是否可达。 方法1(愚蠢的方法,实现起来坑比较多):
注:当前点和目标点之前不能经过有石块的点,否则不能保证移动时不踩到有石头的点。 方法2(数学含量更高的方法,实现起来应该比较简单(但是我没有写)): 易知(这句最不是人话),在dis >= lcm(s, t)时,当前点到目标点一定可达。所以对于dis >= lcm(s, t)的点,我们可以将其距离视作dis % lcm(s, t)。 于是我们可以试图将L <= 1e9压缩到L <= 10000左右,这对于实现的比较好的DP来说,O(n^2)是可以接收的时间复杂度了。 |
23/11/04傻逼题,明明没有难度还在题意里放坑。鄙视。 略 纯贪心 DP。将两个数进行异或,目标是把所有的1消成0。方案有两种,一是用代价x强行把两个1变成0;二是把两个相邻的1变成0(e.g. 1001 -> 0101 -> 0011 -> 0000),代价是两个1之间的距离。 转移以下状态:
之后可以考虑使用DP或者记忆化DFS来做。
首先易得我们可以将大数放到数组的前部,把小数放到后部。因为大数的平方一定比小数大,并且小数之间的AND/OR一定不优于大数。 这道题有一个非常隐含的结论。我们可以使用任意次的AND/OR操作,将小数中的1 bit,转移到大数当中。
这样我们就可以尽可能将所有的1转移到最大数,次大数...直到第k大数。所以此题就转换为一道贪心题目了。 |
The text was updated successfully, but these errors were encountered: