火龙信奥
  • 首页
  • 课程
  • 题库
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

原文

作者: 作者的头像   潘奕喆 , 时间:2022-06-04 10:16:12 , 所有人可见, 阅读  9

新鲜事原文 作者骆禹辰 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 好像有人吧我取关了? 加载中
©2026加盟我们 | 关于我们 | ACM课程 | 常见问题 | 成果墙 | 评测记录 | 浙ICP备2021013995号
在线画图 | OI WIki | 打字练习
火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码