新鲜事原文
作者骆禹辰
2022-04-24 20:59:55
原文
图片图片
展开
分享二分查找算法模板
作者王老师
2022-04-24 09:21:00
二分模板一共有两个,分别适用于不同情况。
算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。
版本1
当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。
C++ 代码模板:
int bsearch_1(int l, int r)
{
while (l < r)
{
int mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid + 1;
}
return l;
}
版本2
当我们将区间[l, r]划分成[l, mid - 1]和[mid, r]时,其更新操作是r = mid - 1或者l = mid;,此时为了防止死循环,计算mid时需要加1。
C++ 代码模板:
int bsearch_2(int l, int r)
{
while (l < r)
{
int mid = l + r + 1 >> 1;
if (check(mid)) l = mid;
else r = mid - 1;
}
return l;
}
展开
分享原码反码补码每日练习参考答案
作者王老师
2022-04-23 19:12:27
原码反码补码每日练习参考答案:
1、D 2、B
3、+58,16位原码: 0000 0000 0011 1010
反码: 0000 0000 0011 1010
补码: 0000 0000 0011 1010
+58,8位原码:0011 1010 反码:0011 1010 补码:0011 1010
-58,16位原码:1000 0000 0011 1010
反码:1111 1111 1100 0101
补码:1111 1111 1100 0110
-58,8位原码:1011 1010 反码:1100 0101 补码:1100 0110
4、(1) A (2) B
5、1110 0110 6、1110 1000
展开
新鲜事原文
作者王老师
2022-04-23 14:37:30
机器数、真值、原码、反码、补码
https://acwinner.com/train/77
分享输入输出提升效率
作者王老师
2022-04-23 10:17:04
输入输出
C++提升效率:
cin.tie(0); // c++ 提升效率
cin.sync_with_stdio(0);// c++ 提升效率
C语法提升效率:
scanf("%d%d", &x, &y); // C语言 提升效率
printf("%d\n", x);
新鲜事原文
作者骆禹辰
2022-04-17 20:33:02
会玩植物大战僵尸的扣机枪,不会的扣2(也就是倭瓜同志),玩原版的扣冰瓜,玩95版的扣玉米加农炮,玩贝塔版的扣香蒲,玩植2的扣双子向日葵,玩其他版本的扣僵王博士。
分享递归实现排列型枚举---画图详解
作者王老师
2022-04-17 11:55:38
其实就是求无重复元素的全排列,经典的dfs题。
dfs 最重要的是搜索顺序。用什么顺序遍历所有方案。
对于全排列问题,以 n = 3 为例,可以这样进行搜索:
假设有 3 个空位,从前往后填数字,每次填一个位置,填的数字不能和前面一样。
最开始的时候,三个空位都是空的: __
首先填写第一个空位,第一个空位可以填 1,填写后为:1
填好第一个空位,填第二个空位,第二个空位可以填 2,填写后为:1 2 __
填好第二个空位,填第三个空位,第三个空位可以填 3,填写后为: 1 2 3
这时候,空位填完,无法继续填数,所以这是一种方案,输出。
然后往后退一步,退到了状态:1 2 __ 。剩余第三个空位没有填数。第三个空位上除了填过的 3 ,没有其他数字可以填。
因此再往后退一步,退到了状态:1 。第二个空位上除了填过的 2,还可以填 3。第二个空位上填写 3,填写后为:1 3 __
填好第二个空位,填第三个空位,第三个空位可以填 2,填写后为: 1 3 2
这时候,空位填完,无法继续填数,所以这是一种方案,输出。
然后往后退一步,退到了状态:1 3 __ 。剩余第三个空位没有填数。第三个空位上除了填过的 2,没有其他数字可以填。
因此再往后退一步,退到了状态:1 。第二个空位上除了填过的 2,3,没有其他数字可以填。
因此再往后退一步,退到了状态: 。第一个空位上除了填过的 1,还可以填 2。第一个空位上填写 2,填写后为:2 __
填好第一个空位,填第二个空位,第二个空位可以填 1,填写后为:2 1 __
填好第二个空位,填第三个空位,第三个空位可以填 3,填写后为:2 1 3
这时候,空位填完,无法继续填数,所以这是一种方案,输出。
然后往后退一步,退到了状态:2 1 __ 。剩余第三个空位没有填数。第三个空位上除了填过的 3,没有其他数字可以填。
因此再往后退一步,退到了状态:2 。第二个空位上除了填过的 1,还可以填 3。第二个空位上填写 3,填写后为:2 3 __
填好第二个空位,填第三个空位,第三个空位可以填 1,填写后为:2 3 1
这时候,空位填完,无法继续填数,所以这是一种方案,输出。
然后往后退一步,退到了状态:2 3 __ 。剩余第三个空位没有填数。第三个空位上除了填过的 1,没有其他数字可以填。
因此再往后退一步,退到了状态:2 。第二个空位上除了填过的 1,3,没有其他数字可以填。
因此再往后退一步,退到了状态: 。第一个空位上除了填过的 1,2,还可以填 3。第一个空位上填写 3,填写后为:3 __
填好第一个空位,填第二个空位,第二个空位可以填 1,填写后为:3 1 __
填好第二个空位,填第三个空位,第三个空位可以填 2,填写后为:3 1 2
这时候,空位填完,无法继续填数,所以这是一种方案,输出。
然后往后退一步,退到了状态:3 1 __ 。剩余第三个空位没有填数。第三个空位上除了填过的 2,没有其他数字可以填。
因此再往后退一步,退到了状态:3 。第二个空位上除了填过的 1,还可以填 2。第二个空位上填写 2,填写后为:3 2 __
填好第二个空位,填第三个空位,第三个空位可以填 1,填写后为:3 2 1
这时候,空位填完,无法继续填数,所以这是一种方案,输出。
然后往后退一步,退到了状态:3 2 __ 。剩余第三个空位没有填数。第三个空位上除了填过的 1,2,没有其他数字可以填。
因此再往后退一步,退到了状态:3 。第二个空位上除了填过的 1,2,没有其他数字可以填。
因此再往后退一步,退到了状态: __。第一个空位上除了填过的 1,2,3,没有其他数字可以填。
此时深度优先搜索结束,输出了所有的方案。
算法:
用 path 数组保存排列,当排列的长度为 n 时,是一种方案,输出。
用 state 数组表示数字是否用过。当 state[i] 为 1 时:i 已经被用过,state[i] 为 0 时,i 没有被用过。
dfs(i) 表示的含义是:在 path[i] 处填写数字,然后递归的在下一个位置填写数字。
回溯:第 i 个位置填写某个数字的所有情况都遍历后, 第 i 个位置填写下一个数字。
#include<iostream>
using namespace std;
const int N = 10;
int path[N];//保存序列
int state[N];//数字是否被用过
int n;
void dfs(int u)
{
if(u > n)//数字填完了,输出
{
for(int i = 1; i <= n; i++)//输出方案
cout << path[i] << " ";
cout << endl;
}
for(int i = 1; i <= n; i++)//空位上可以选择的数字为:1 ~ n
{
if(!state[i])//如果数字 i 没有被用过
{
path[u] = i;//放入空位
state[i] = 1;//数字被用,修改状态
dfs(u + 1);//填下一个位
state[i] = 0;//回溯,取出 i
}
}
}
int main()
{
cin >> n;
dfs(1);
return 0;
}
时间复杂度为 O(n*n!)。
空间复杂度为 O(n)。
有问题直接评论即可,
求点赞~谢谢
展开
新鲜事原文
作者杨瑞
2022-04-16 16:47:09
奥迷的壁纸(冰山一角)
图片
展开
分享位运算之——非运算
作者陈一帆
2022-04-16 16:22:17
抬头遥望夜空,低头只见帆帆。大家好我是帆帆(大家好,我是刚刚吃完泡面,举着准备揍帆帆的棺材的小白。)
今天的小白是绝对不会给我送一个包的,因为今天讲的是小白最好奇的非运算!!!(【将棺材放下】嗯,这还差不多!)
非运算不同于与运算和或运算(或运算将在下一篇分享中进行讲解),他们两个都是有着稍微难一丢丢规律的,而非运算则是这样的,老样子,我继续举例子。(掌声欢迎!!!)、
继续拿上篇文章的例子,也就是1100和1001(具体十进制后是啥就不用我小白说了吧,不知道的,自己去看上篇分享。)
好,拿到这两个数后,我们列个竖式(【专心致志】…………)
1100 1001
—————————— ——————————
0011 0110
这是为啥呢???(【以蜜雪冰城的节奏】你问我,我问谁,反正我又不知道)
非运算就是这样的:将1变0,将0变1。(噢————,斯国一。)
在编程里的情况如下cpp a=~12 b=~9
来,让我们一起喊:斯国一————!(斯国……【默默举起棺材】呀呀呀呀呀!!!【猛砸】)
【顶着一个能捅破地球的包】全剧终——下课。
展开
新鲜事原文
作者吴坤鍾
2022-04-10 14:27:55
hhh
新鲜事原文
作者吴坤鍾
2022-04-10 14:27:42
我是........(懂的都懂)
分享位运算之与运算(小白:???)
作者陈一帆
2022-04-09 16:45:24
人生若只如初见,没睡醒的帆帆来相见(哈喽,我是小白)
今天这个玩意儿呢,有亿点点神奇(啥子呦?),他叫—————(【期待的眼神】)他叫—————(【逐渐无语】)他叫————(【扔棺材】你够了没!!!)
【顶着一个包】他叫————位运算(【将手中的第二副棺材放下】呼~这还差不多,话说回来,位运算是个什么玩意???)
咳咳,位运算吗,它,有三种,我会逐一介绍,分别为————与运算,或运算和非运算(说实在的,我对非运算有一点好奇,【流口水】我先去吃碗泡面,讲到非运算时叫我!!!)
哎,历史总是那么相似。话不多说,正片开始。
先说与运算,后面,我们在此之前,学了逻辑中的或,也就是&&,在这里,他就变成了这个样子&,我们先列举一个二进制数1100【10进制后为12】和1001【10进制后为9】那么在编程里他就是这么个形式
12&9=8
1100
&1001
——————
1000
这什么情况呢???做这个我们只需记住,他就像加法一样,一位一位的判断,怎么判断呢?记住:有0则为0,双1则为1。然后就知道答案为1000,也就是8。
好,下课。(【刚吃完泡面】哎哎哎哎,等等我!我还没好呢!!!)
展开
新鲜事原文
作者金乔龙
2022-04-09 14:17:58
这个人“这帅”
图片
展开
新鲜事原文
作者金乔龙
2022-04-09 14:10:12
这人真是个极品
图片
展开
新鲜事原文
作者金乔龙
2022-04-09 14:08:48
原文
图片
展开
新鲜事原文
作者王老师
2022-04-09 13:41:50
I级-常见函数:
图片
展开
新鲜事原文
作者傅钰宸
2022-04-09 13:39:30
金乔龙说你们都是帅哥
图片
展开
新鲜事原文
作者王老师
2022-04-09 11:45:32
写出下图二叉树中的三种遍历方式:
前序遍历:balabalabala
中序遍历:balabalabala
后序遍历:balabalabala
图片
展开
新鲜事原文
作者王老师
2022-04-09 11:15:56
二叉树知识点:
https://acwinner.com/train/72
新鲜事原文
作者方仲杰
2022-04-08 20:39:57
好像有人吧我取关了?
加载中