- 博客(14)
- 收藏
- 关注
原创 按位与和按位或的一个性质
假如两个数a与b,那么就存在a|b>=a且a|b>=b,同时,a&b<=a且a&b<=b。这个性质用二进制就很显然,先看或,只要对应位上存在一个1那么就一定是1但是对应位上是0经过按位或之后就可能变成1,因此或运算之后肯定会大于等于原来的两个数,同理按位与,对应位上是0的话那肯定就是0,如果1的话也可能变成0,那么与运算之后肯定会小于等于原来的两数。(相关题目:牛客小白月赛87f题)
2024-02-16 23:09:07
253
1
原创 素因子的概念以及开根号判断是否为素数
问题来自牛客round31B题,素因子的概念,一开始肤浅的认为是一个数的因子里而且是素数的那些(后来想想也没错),但实际上这样判断就会加大算法的复杂度,更简单的理解一下就是把一个数分解为全是素数的形式,例如12,变成2*2*3,那么其素因子就是2和3,那么我们在判断的时候找到一个是其因子的数我们一直除去直到其不能再被这个因子除去即可。然后就是开根号判断其是否为素数。我们简单理解一下,拿30举例子,我们可以是2*15得到它,也可以是15*2得到它,同样3*10和10*3,那么中间值是什么?
2024-02-04 22:59:19
484
1
原创 map<int ,int>和数组的区别?(小白问题)
问题来自于牛客周赛 Round 29的d题,题解里使用map<int,int>类,很困惑既然int对应int型,我们为什么不直接使用数组?经过尝试我们可以发现这里就牵扯到内存问题,数据范围为1<a<1e9,我们开了这个数组发现代码甚至无法运行,数组内存受限,那么我们使用map类型就可以有效地避免这个问题,这就是为什么要使用map<int,int>,
2024-02-03 23:03:44
299
1
原创 exp()函数的使用
问题来自于牛客NC15185,题目要求e的a次方再乘b的精确值,理论上我们可以直接搜索e的值然后带入,使用循环来得到e的a次方,可实际上这种方法是不通过的,精度不够,所以就找到了math.h里的exp()函数,exp(x)的意义就是返回e的x次方,代码如下。
2024-02-01 10:32:08
568
1
原创 p1106删数问题
这是一道贪心的问题,我们要从一个数字中删掉k个数字来达到其最小值,如果这个数字有n位,那我们是不是自然而然想到最后他要剩下n-k位数字,那么我们就可以想到从第1位到第k+1位取到最小的数字(因为数字的相对位置不变,至少要留下后面的n-k-1个数字以达到n-k位),之后在找到了这个第一个最小的数字之后,我们标记为mark,然后我们再从mark+1往后找k个数,以此类推我们就有了大概的思路。
2024-01-31 19:58:26
485
原创 set容器的有关问题。
然后,我们该如何输出整个set里的元素?一开始自然而然想到for(int i=1;i++),实际上这种方法是不能实现的,我们要通过迭代器来实现,代码如下。源自于set容器的输出问题,搜索了许多都没有结果,首先第一个问题,为什么输出前要加‘*’这个符号?容器时,迭代器指向的是容器中的元素,而不是元素的地址。因此,在输出元素时,需要使用解引用操作符。,就会输出迭代器本身的地址,而不是元素的地址,这是没有意义的。因此,在使用迭代器输出。来获取迭代器指向的元素值。容器的元素时,需要加上。
2024-01-30 14:49:51
219
1
原创 约瑟夫问题用stl的解法。
根据队列queue的性质,先进先出,我们可以考虑,先压入所有的人,然后把第一个人压入最后,然后弹出最后一个人,直到第k-1个人,我们结束循环,然后输出第k个人,然后又继续从k+1个人进行循环,代码如下。
2024-01-29 19:44:22
275
原创 [NOIP2008 普及组] 传球游戏 (递推题目的典型)
我们首先要知道如何找到这个递推状态,我们如何去设置,一开始我想到了设置f[n][m],n为人数,m为投球次数,f[n][m]则为方法数,但发现如此设置是无法找出递推关系的,其实不难想到,如果设置f[n][m],n为投球次数,而m为拿球人的号码,我们可以知道在n次投球下m号拿到球的方法数,为什么这种可以设置成功,主要原因在于我们找到了一个递推关系,f[n][m]=f[n-1][m-1]+f[n-1][m+1],m号在n次投球下拿到球的方法就会等于他左右两边号在n-1次投球下的方法数之和,故我。
2024-01-27 20:07:44
307
原创 有关递推题目的感想(继上篇文章)
同时,如果想不那么麻烦,我们也可以用一个二维数组来表示,代码如下。其中,0和1就代表了上面代码的f和k的状态区别。
2024-01-26 23:29:39
621
1
原创 关于acm一些初级递推题目的理解(学习日记)
再拿《[NOIP2001 普及组] 数的计算》这道题举例子,这道题也是一样的要找出递推关系,我们先计算一下,f(1)=1,f(2)=2,f(3)=2,f(4)=4,f(5)=4,f(6)=6,f(7)=6,f(8)=10,其实我们可以发现如果要求n的数列数的话,本质就是第一个数是n,第二个数依次是1到n/2,那么我们就得到f(n)其实就是f(n/2)加到f(1),最后加上一个自身组成的数列,答案就是f(n)=从1到n/2的f(x)之和再加1.下面给出代码。总结一下,重点就是要就是找出递归关系。
2024-01-24 20:18:57
410
原创 如何在c中把int型转化成char型?
本问题来自我写牛客中的一道简单题《扫雷》,本题为了方便要使用一个char数组,但是特殊情况下,char数组里面不仅有char型还有int型,那么正常是无法储存的,那么就要想办法把int转化为char,因此我了解到了一个方法,char a = b +'0',这个其中b为int型,通过这个方法,能成功把a变成b的字符型。
2024-01-24 11:17:47
741
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅