- 博客(28)
- 收藏
- 关注
原创 AcWing273 分级
给定长度为 N 的序列 A,构造一个长度为 N 的序列 B,满足:1. B 非严格单调,即 B1≤B2≤…≤BN或 B1≥B2≥…≥BN。2. 最小化 S=∑Ni=1|Ai−Bi|只需要求出这个最小值 S。
2024-08-13 11:21:25
372
原创 欧拉定理和拓展欧拉定理
给你三个正整数,a,m,b,你需要求:a^b mod m(对于 100% 的数据,1≤a≤10^9,1≤b≤10^20000000,1≤m≤10^8)因为b的数值太大,所以用拓展欧拉定理,拓展欧拉定理的第二种情况正好给b降幂。特别的:当m是质数时,
2024-08-08 15:45:44
181
原创 中国剩余定理(普通和拓展)
举个例子,如果建了 3 个猪圈,剩下 1 头猪没有地方安家。如果建造了 5 个猪圈,但是仍然有 1 头猪没有地方去,然后如果建造了 7 个猪圈,还有 2 头没有地方去。然后根据步骤运算就可以了,其中用到了extend_gcd(ps:这个真的好常用啊!
2024-08-06 11:11:33
123
原创 威尔逊定理
刚开始,我将need[ ]大小设为3000000,然后下面给need赋值也循环3000000次,明显超时而且超内存,后面发现将上面有prime[ i ](输出need[ n*3+7 ])改为prime[ (i+7)/3 ](输出need[ n ])这样就可以缩小need的大小了。2. p是大于4的合数时,后面为整数,前面为略大于后面的小数,向下取整为0。1. 当p为质数时,前面是整数,后面向下取的整数,结果为1。所以只要统计p是质数的个数就行。
2024-08-05 20:00:43
270
原创 Modulo Ruins the Legend(exgcd问题)
格莱美有一个整数序列 a1,a2,…她认为序列中的元素太多,因此决定在序列中加入一个算术级数。从形式上看,她可以选择两个非负整数 s,d,并在每个 k∈[1,n] 的基础上将 s+kd 加到 ak 中。由于我们想破坏图例,请告诉她操作后元素 modulo m 的最小和。注意,应在取模后将和最小化。其实通过分析就可以列出一个式子。
2024-08-02 19:58:23
148
原创 nowcoder—来点gcd
给定一个有 n个元素的多重集 S,有 m个询问,对于每个询问,给出一个整数 x,问是否能选择 S 的一个非空子集,满足这个子集的 gcd 等于x,当集合只有一个数时,设这个集合的 gcd 就等于这个数,gcd(x,y)的值为x,y的最大公约数。这里其实就是从1开始遍历,判断是否 i 能成为由另两个数组成的gcd,而 i 要能被gcd出来,那一定是要被i的倍数gcd出来,因此,这个判断条件就是判断第一个存放S的数组里面是否有 i 的倍数的这个元素。中途如果找到了,其实可以直接退出的,不用继续循环了。
2024-08-01 15:54:55
222
原创 AcWing203 同余方程
为了找到 x,我们首先需要确保 a 和 b 互素(即 gcd(a,b)=1),因为只有在这种情况下,模反元素才存在。对于 ax≡1(modb)来说,存在唯一 x 满足这个方程。因此,可以直接x=((x%b+b)%b)对于另外一种情况:如果同余方程的一般形式是 ax≡c(modb),其中 c 不是 1,那么需要找到一个 x 满足这个方程。求关于x的同余方程ax≡1(modb)的最小正整数解。输入只有一行,包含两个正整数a,b,用一个空格隔开。输出只有一行,包含一个正整数x,表示最小正整数解。
2024-07-31 10:24:05
309
原创 欧几里得—欧几里得拓展—线性同余方程
即如果a、b是整数,那么一定存在整数x、y使得ax+by=gcd(a,b)。欧几里得算法:辗转相除法,用于求两个数的最大公约数。裴属定理:ax+by=gcd(a , b)线性同余方程是最基本的同余方程,形如。)的未知数是 x 的同余式。
2024-07-30 16:02:02
216
原创 赫夫曼树和赫夫曼编码
是一种变长编码,即不等长编码,赫夫曼编码是赫夫曼树的应用之一。赫夫曼编码的特点是没有任何字符的编码是其他字符编码的前缀,所以赫夫曼编码也称为前缀编码。是一种带权路径长度最短的二叉树,也称为最优二叉树。4.根据赫夫曼编码对字符进行编码。3.根据赫夫曼树生成赫夫曼编码。1.统计字符出现的次数。
2024-07-24 10:05:18
217
原创 贪心算法(Load Balancing)
每个测试用例都包含一个整数 N (1<=N<=100000) 和 M (1<=M<=100)。接下来的 N 行包含整数,表示作业 T1、T2Tn 的时间。在这道题,还遇到了一个小插曲,刚开始我用c++写,oj判定超时,想了不少办法简化代码,没有用,后来把输入输出语句改成c语言,就通过了,至少节约800MS的时间,很夸张!对于每个测试用例,首先输出 N,随后的 N 个数字表示我分配给哪个服务器的工作。但是,正如 Wiskey 所知道的,这种寻找最小差距分配的调度问题是 NP 困难的。
2024-07-24 09:58:34
209
原创 Nim尼姆博弈
现在我们不想研究到底先手为胜还是为负,我只想问大家:“先手的人如果想赢,第一步有几种选择呢?sum==0时,先手输,sum!桌子上的扑克全部取光,则游戏结束;下面是一个二人小游戏:桌子上有。这一类型的游戏称为尼姆博弈。
2024-07-22 19:37:32
181
原创 Josephus problem约瑟夫环问题
问题形式:N个人围成一圈,从第一个开始报数,第K个将被杀掉,最后剩下一个,其余人都将被杀掉。当然,当n=0时,jose自然等于0,易得n=1时,jose自然也等于1。每一个n,都能与n-1产生联系,从而根据此写出代码。
2024-07-22 16:45:15
105
原创 为什么要用memset
但是,测试用例全部可以通过,检查了很多次也没有问题,但就是不可以AC。因此,建议以后都使用memset去初始化数字。后来,去找了一下原因,发现用memset。
2024-07-22 16:19:10
149
原创 初次认识subplots
这里 plt.subplots( )里面前两个变量表示的是1行3列,figsize(9,3)表示尺寸为9(横)3(竖),sharex或sharey表示是否共享x轴或y轴。值得注意的是,之前的plt.title()是给整张图命名,而这里我们要set_title()来命名。接下来描点或划线的步骤就和之前的plt一样了。我这里以多元线性回归为示例。
2024-03-24 10:48:59
186
1
原创 线性回归模型
shape函数是Numpy中的函数,它的功能是读取矩阵的长度。plt.scatter用来打印点,提供点,marker(点的样子),color,label。plt.plot用来打印直线,提供起始点,color,label(名称)plt.legend(loc=" ")用来确定点或线的注释区的位置。当然,在此函数里我添加了多次打印,用来表现函数图象的变化。根据此函数,获得当前w,b的cost value。在这里(2,3)表示的是2行3列。最后,我们用代码打印出最终的函数。
2024-03-19 11:17:52
180
原创 Python:list assignment index out of range
此代码运行结果报错IndexError: list assignment index out of range。报错原因:在使用python进行列表操作时,不能直接对空数组指定位置。解决方案:用append()函数。
2024-03-17 11:55:02
440
2
原创 nextLine()未执行
实际上是因为我打的2.1后有一个回车,而这个回车被nextLine()吞掉了,所以在nextLine前在加一个nextLine来吞掉这个回车即可。
2024-01-21 19:49:56
490
原创 构造函数、析构函数、拷贝函数(拷贝赋值和拷贝构造函数)
下面给一个String类: 构造函数无返回值类型,且在创建对象时被自动调用。当我要使用构造函数的时候,应该如下:当对象离开作用域或被显式地删除时,析构函数被自动调用防止内存泄漏拷贝构造函数下面的拷贝构造函数为深拷贝,使用浅拷贝会发生内存泄漏拷贝赋值函数这里相较于拷贝构造函数的区别是,已经创建好了两个object,我们要先把一个清空,在进行拷贝构造函数的步骤这里检测自我赋值是很有必要的,因为如果this=&str的话,那二者所指向的地址是一样的,一旦进行delete
2023-12-19 11:34:25
492
1
原创 操作符重载&&return by reference
如果c1+=c2+=c3:在这里,为什么操作符重载的返回值不能是void呢?因为,+=最后还要把结果赋值给前者,所以c2+=c3结果的值又要作为参数传递,所以要与操作符重载函数的形参类型相同。如*ths是一个值,而complex&是reference,这是没关系的。在c++里,利用操作符重载,操作符就相当于一种函数。传递者无需知道接受者是以reference形式接受。如:c1(this)+=c2。
2023-12-18 23:22:00
376
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人