竞赛
考级
好像是叫双端BFS来着。 前置知识点:普通队列BFS 整理一下学习的双端队列。 假设这是一个需要跑BFS的图 ! 红色是起点,绿色是终点。 如果是普通的BFS,可以使用队列作为容器,以红点为起点,承载节点去完成遍历。 Q:此过程如何加速? A:以红点为起点,绿点为起点同时进行BFS,直到相遇。 比如: 红色数字表示由红点出发的遍历(由于BFS是一层一层进行遍历的,所以第一层表示为1,第二层表示为2),绿色数字表示由绿点出发的遍历。 直到红,绿数字相遇。那么本次遍历完成。花费(时间):红点花费+绿点花费。 注意:由于BFS的特点,(一般)取第一次。 这就是双端BFS的大体思路。 然后再提一提代码框架。 首先,有一个 while(!q1.empty()&&!q2.empty()) 的循环。(因为要分别以红,绿点为起点;所以需要两个队列) 然后每一次循环,去判断红点队列中的点多还是绿点队列中的点多。优先选择点数小的那一个进行BFS。 原因:有一点贪心的感觉,另外极端例图打破一切偏见: 在本图中,如果你优先取遍历红色顶点,你可能要遍历n+1个点。 但如果你选择先遍历绿色顶点,你只需要遍历1+n21+\frac{n}{2}1+2n 个顶点即可。 大体上似乎就是这样,然后请看例题:P1746离开中山路 代码:
因为一些神秘原因,需要写一下 T6 思路,后来考虑到既然都赛后复盘整理思路了(我平时打模拟赛从来不复盘的,显然这是一个坏习惯),不如水一篇题解。 容易发现这题其实是有原的:https://codeforces.com/problemset/problem/1239/B。 我两万年前打 Duel 的时候竟然还刷到过(),不过不幸的是当时对着题解看了好久没看懂。 先考虑什么是正规括号序列,比较容易想到的做法是栈,线性跑一遍即可,我记得这好像专门有一道题是干这个的,但是目前没找到/kel。但是这种方法在本题中显然是不可取的,不可能每次都要用栈跑一遍。考虑以 ( 为 111,) 为 −1-1−1 所构建的前缀和数组 aaa,满足以下条件: 1. 对于每一个 1≤i≤n1\le i\le n1≤i≤n,都有 ai≥0a_i\ge 0ai ≥0。 2. an=0a_n=0an =0。 其实很好证明,原理和栈实现是一样的。 很显然对于 sn≠0s_n \ne0sn =0,必然无解,直接输出 0 1 1。 然后有一个比较常见的解决环上问题的方法就是破环为链,考虑将原数组复制两份。 然后考虑在一个序列中,怎么找到其合法切口数。其实就是由前缀和数组中最小的那个元素的决定的,读者可以自己思考一下为什么一定要在最小的那个元素位置上切开,才可以保证切割后的序列合法(主要还是满足上述条件第一条)。接下来易得合法切口数就是最小元素的出现次数。 然后是最难的部分也就是如何考虑交换这个东西。 我们要做的就是使得交换后的序列中出现尽可能多的最小值,我不知道这样子讲得详不详细,如果存在疑问可以指出。 通过注意力可以发现 后面的目前更不了,笔者被浮木线下单杀了,可以先暂时自行思考交换后对前缀和数组会有哪些影响。
最近学习较忙,没时间看ACGO,有几个月没上线了,现在回归了,双休在线
我的世界服务器 Java的 可以用pcl2,hmcl,bakaxl进 版本是1.19.2 地址是mcp18.rhymc.com:1084 开了6个月 随时可进,无需加群,或者加群也行 qq群:1060370031
团队招人了 -> 链接
我和“麒麟工会”的小伙伴都在ACGO等你,快用这个专属链接加入我们吧!https://www.acgo.cn/application/2008884271079591936
这是主包的个人题库,希望大家可以做做: 1.高高高高高精度加法 2.请使用Python解决 3.A+B Problem Pro Max 4.航司判断 5.from Beijing to British 6.my place 7.告诉你的一定就对吗 8.告诉你的就一定对 9. 0.9999999······和1谁更大 10.简单 11.? 12.圆周率的第1000位是几? 13. 1+1等于几? 14.你是人吗 15.模拟枚举 16.输出 “\ " \ ' \ " 17.输出1+2+5+9+5+4+9+6+1+5+6的结果
C++语言:兼具高效与灵活的通用编程语言 C++是一种静态类型、编译型的通用编程语言,由丹麦计算机科学家本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)于20世纪80年代在贝尔实验室首次设计并实现。它以C语言为基础,保留了C语言的高效、简洁和贴近硬件的特性,同时引入了面向对象编程(OOP)、泛型编程、模板元编程等现代编程范式,成为一门兼具过程式、面向对象和泛型编程能力的多范式语言。如今,C++广泛应用于系统开发、游戏引擎、嵌入式设备、高性能计算、人工智能框架等领域,是计算机科学领域中不可或缺的核心语言之一。 一、C++的起源与发展历程 C++的诞生源于对C语言的扩展需求。20世纪70年代,C语言凭借其高效性和可移植性成为系统编程的主流语言,但随着软件规模的扩大,C语言的过程式编程范式在代码复用、模块化设计和维护性方面逐渐显现出局限性。1979年,斯特劳斯特卢普开始在C语言中引入Simula语言的面向对象特性,最初将这个新语言命名为“C with Classes”(带类的C)。1983年,该语言正式更名为C++,其中“++”取自C语言的自增运算符,寓意着对C语言的超越和扩展。 1985年,第一本C++教材《The C++ Programming Language》的出版标志着C++的正式成型。1998年,国际标准化组织(ISO)发布了第一个C++标准(C++98),奠定了C++的语言基础。此后,C++经历了多次重要的标准更新:2003年的C++03主要对C++98进行了错误修正和细节完善;2011年的C++11是一次里程碑式的更新,引入了Lambda表达式、智能指针、移动语义、范围for循环等大量新特性,极大提升了语言的现代性和易用性;后续的C++14、C++17、C++20和C++23则持续迭代,分别在泛型编程、模块化、协程、概念(Concepts)、范围(Ranges)等方面进行了增强,使C++始终保持对现代编程需求的适配。 二、C++的核心特性 1. 兼容C语言,兼具高效性 C++完全兼容C语言的语法和语义,绝大多数C语言代码可以直接在C++编译器中编译运行。这一特性使得C++能够继承C语言的核心优势:贴近硬件底层,允许程序员直接操作内存(如指针、数组),拥有极高的执行效率和内存控制能力。与解释型语言(如Python、JavaScript)不同,C++代码经编译器编译为机器码后直接运行,无需虚拟机或解释器的介入,因此在性能敏感的场景(如操作系统内核、实时系统)中表现卓越。 2. 面向对象编程(OOP) 面向对象编程是C++的核心特性之一,它将数据和操作数据的方法封装为“类(Class)”,通过对象的实例化实现代码的模块化和复用。C++支持OOP的三大核心特性: * 封装:通过访问控制符(public、private、protected)隐藏类的内部实现细节,只对外暴露必要的接口,提高代码的安全性和可维护性。 * 继承:允许一个类(派生类)继承另一个类(基类)的属性和方法,实现代码的复用和层次化设计,例如可以从“Shape”基类派生出“Circle”“Rectangle”等子类。 * 多态:分为静态多态(编译时多态,通过函数重载和模板实现)和动态多态(运行时多态,通过虚函数和继承实现)。动态多态使得基类指针或引用可以指向派生类对象,并调用派生类的重写方法,是实现“开闭原则”的关键。 3. 泛型编程与模板 泛型编程是C++的另一大特色,其核心思想是编写与数据类型无关的通用代码,以提高代码的复用性。C++通过模板(Template) 实现泛型编程,分为函数模板和类模板: * 函数模板允许定义一个通用的函数,支持不同类型的参数,例如实现一个通用的排序函数,可用于int、float、字符串等多种类型的数组。 * 类模板则允许定义通用的类,例如C++标准库中的vector<T>、map<K, V>等容器,都是通过类模板实现的,能够适配不同的数据类型。 模板还支持模板元编程(TMP),即在编译期执行计算和逻辑判断,这一特性使得C++能够在编译期优化代码,进一步提升运行效率。 4. 丰富的标准库 C++标准库(STL,Standard Template Library)是其重要组成部分,提供了大量的通用数据结构和算法,极大地简化了开发工作。标准库主要分为以下几个部分: * 容器(Containers):提供了常用的数据结构,如动态数组(vector)、链表(list)、栈(stack)、队列(queue)、映射(map)等,这些容器均通过模板实现,支持任意数据类型。 * 算法(Algorithms):包含了排序(sort)、查找(find)、遍历(for_each)、交换(swap)等通用算法,可直接作用于容器,实现高效的数据处理。 * 迭代器(Iterators):作为容器和算法之间的桥梁,提供了统一的访问容器元素的接口,使得算法可以独立于具体的容器类型。 * 函数对象(Functors)、智能指针(Smart Pointers)(如unique_ptr、shared_ptr)等工具类,进一步增强了语言的易用性和安全性。 5. 内存管理与性能控制 C++允许程序员直接管理内存,通过new和delete运算符手动分配和释放内存,这一特性赋予了程序员极高的灵活性,但也带来了内存泄漏、野指针等风险。为了缓解这一问题,C++11引入了智能指针,通过RAII(Resource Acquisition Is Initialization,资源获取即初始化)机制自动管理内存,在对象生命周期结束时自动释放内存,有效减少了内存错误。 此外,C++支持手动控制内存布局、内联函数(inline)、编译器优化等特性,使得程序员能够针对性能关键的代码进行精细优化,满足高性能应用的需求。 三、C++的应用领域 C++的高效性、灵活性和多范式特性使其在多个领域占据主导地位: 1. 系统软件开发:操作系统内核(如Windows、Linux的部分模块)、设备驱动程序、编译器、解释器等底层软件,均大量使用C++开发,因为它能够直接与硬件交互,且执行效率极高。 2. 游戏开发:主流的游戏引擎(如Unreal Engine、Unity的底层核心)均采用C++开发,游戏对实时性和性能的高要求使得C++成为首选语言。 3. 嵌入式系统:在汽车电子、工业控制、智能家居等嵌入式设备中,C++凭借其高效性和对资源的低消耗,被广泛用于开发底层控制程序。 4. 高性能计算与人工智能:在科学计算、大数据处理、人工智能框架(如TensorFlow、PyTorch的底层核心)等领域,C++的高性能特性使其成为实现核心算法的首选。 5. 金融科技:高频交易系统对响应速度要求极高,C++的低延迟特性使其成为金融科技领域的主流语言。 四、C++的优势与挑战 优势 1. 高性能:编译为机器码运行,直接操作硬件,执行效率接近机器语言,是高性能应用的首选。 2. 多范式编程:支持过程式、面向对象、泛型、函数式等多种编程范式,可根据需求选择合适的编程风格。 3. 高度灵活:允许直接管理内存、控制硬件,适配从底层系统到上层应用的各种开发场景。 4. 丰富的生态:拥有庞大的开发者社区和丰富的第三方库,以及成熟的标准库,降低了开发成本。 挑战 1. 学习曲线陡峭:C++特性繁多,语法复杂(如指针、模板、内存管理),初学者需要花费较多时间掌握。 2. 内存安全风险:手动内存管理容易导致内存泄漏、野指针、缓冲区溢出等错误,增加了调试难度。 3. 编译复杂度高:模板的使用可能导致编译时间延长,且错误提示较为晦涩,增加了调试成本。 五、C++的未来发展 随着C++标准的持续更新,其语言特性不断完善,朝着更现代、更易用、更安全的方向发展。C++20引入的模块化(Modules)特性解决了传统头文件的冗余编译问题,大幅提升了编译效率;概念(Concepts)则增强了模板的类型检查,使泛型编程更安全;协程(Coroutines)为异步编程提供了原生支持,适用于高并发场景。C++23进一步优化了这些特性,并增加了更多便捷的语法和工具,如增强的范围库、字符串处理等。 同时,C++在新兴领域的应用也在不断拓展,例如在量子计算、边缘计算、自动驾驶等领域,其高性能和底层控制能力依然具有不可替代的优势。 总结 C++作为一门历经四十余年发展的编程语言,始终保持着强大的生命力。它既继承了C语言的高效和简洁,又融合了现代编程的先进理念,成为连接底层硬件与上层应用的重要桥梁。尽管学习和使用C++存在一定的挑战,但其在高性能、高灵活性方面的优势,使其在系统开发、游戏、嵌入式、高性能计算等领域依然是无可替代的选择。随着标准的不断更新和生态的持续完善,C++将继续在计算机科学领域发挥重要作用,为开发者提供强大的工具和无限的可能性。 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 配套尝试文件:飞机小游戏 提取码:7878
大家好,最近,我将推出一系列C++课程,欢迎参与! 有什么建议或有什么反馈,请务必告诉作者 作者邮箱:wanhr666@qq.com ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 可熟悉一下头文件:C++常用库函数 提取码:7878 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 目录 第一章——《C++语言》 第二章——《基础语法》 第三章——《循环语法》
返回目录 一个小游戏,放心,很安全的,没有WINDOWS库 火绒中文版来啦!!!欢迎各路大佬给出建议。 广告:一个小团队聊天室入口 一个小团队入口
我是三角洲新手 希望有玩三角洲的大佬 告诉我一些三角洲里 不为人知的秘密 打人超猛的枪械(目前在用二十万MP7,太亏了呀) 爆率超高的地点(不只会玩普坝和机密大坝,爱玩机密巴克石) 绝密马上开了呀好吧,带什么进去啊!!! 操作简单的干员(现在鸟玩的挺好(银翼),疾风能玩吗) 使我把把百万撤离 目前状况: 25级 8100000哈夫币 CCCCCCCCCCCC,现在已经亏到380万了(但和同学打机航出锅了) 帮帮我吧!!! 特殊情况:我操作特别人机,反应力特别慢,遇到人打不死,咋办啊,救救鼠鼠吧(骗你的,机密用MP7一把杀一队(所以亏死了)) 我会尽量回复大家的评论,但还有一个坏消息—— 由于本人这次月考考得不好,所以首级直接被没收了(六六六,成为路易十六了),所以估计寒假才能跟各位打几把
STARTOPIA揽星社欢迎你!!! 福利多多多多多多!!! https://www.acgo.cn/application/2008893147354615808 这是我们的团队,希望你能加入 编辑 @揽星客 审核 @小肥羊 咨询请加 @揽星客
返回目录 一个小游戏,放心,很安全的,没有WINDOWS库 新系列来啦!!!欢迎各路大佬给出建议。 广告:一个小团队聊天室入口 一个小团队入口
返回目录 一个小游戏,放心,很安全的,没有WINDOWS库 3.3版本来啦!!!欢迎各路大佬给出建议。 这次更新了趣味玩法和选择先后手。 广告:一个小团队聊天室入口 一个小团队入口
队列总结 一.STL 中的循环队列 queue 先进先出 1.queue 的使用 需要添加头文件:#include<queue> 2.queue 定义 (1)格式:queue<数据类型> 队列名; (2)举例: 3.queue 的成员函数 注意: ①push ②输出队列元素 ③queue 只能队首出,队尾进 (先进先出) ;只能在队尾 push(),队首 pop();queue 不支持下标访问! 二.STL 中的双端队列 deque 1. deque 的使用 需要添加头文件:#include<deque> 2. deque 定义 格式:deque<数据类型> 队列名; 3.deque 的常用函数 注意: ①可以在队首和队尾 进行删除和插入 (双端都可以进行入队和出队) ②可以通过下标访问:可以使用 dq[0] 三.STL 中的优先队列 普通的队列是一种先进先出的数据结构,元素在队尾追加,从队首删除。 在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。 优先队列具有最高级先出(first in,largest out)的行为特征。 1.priority_queue 的使用 需要添加头文件:#include<queue> 2.priority_queue 定义 (1)格式:priority_queue<数据类型>队列名; (2)举例: 3.priority_queue的成员函数 4.练习
你好
ACGO社区是一个网站,在这个网站上面,大家都可以在上面发起讨论 为了在手机上可以互相聊天,互相了解,我做了一个群 如果有人加的话,我会在每周更新二维码 在这个群中,只要不做过于过分的事,都可以干 大家也可以熟悉和人加微信 (可以换成ACGO的ID)
f(x)=f(a)+f′(a)(x−a)+f′′(a)2(x−a)2+f′′′(a)6(x−a)3+⋯+f(k)(a)k!(x−a)k如用泰勒级数求ex:∵exp′(x)=exp(x)a=0,则:∴exp(x)=exp(0)+x⋅exp(0)+exp(0)2x2+⋯根据x0=1,所以:exp(x)=1+x+x22!+x33!+x44!+⋯f(x)=f(a)+f'(a)(x-a)+\frac{f''(a)}{2}(x-a)^2+\frac{f'''(a)}{6}(x-a)^3+\cdots+\frac{f^{(k)}(a)}{k!}(x-a)^k\\ 如用泰勒级数求e^x:\\ \because exp'(x)=exp(x)\\ a=0,则:\\ \therefore exp(x)=exp(0)+x\cdot exp(0)+\frac{exp(0)}{2}x^2+\cdots\\ 根据x^0=1,所以:\\ exp(x)=1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+\frac{x^4}{4!}+\cdots\\ f(x)=f(a)+f′(a)(x−a)+2f′′(a) (x−a)2+6f′′′(a) (x−a)3+⋯+k!f(k)(a) (x−a)k如用泰勒级数求ex:∵exp′(x)=exp(x)a=0,则:∴exp(x)=exp(0)+x⋅exp(0)+2exp(0) x2+⋯根据x0=1,所以:exp(x)=1+x+2!x2 +3!x3 +4!x4 +⋯
我真的无语了,我考GESP2级,第二道编程题题提交的时候显示答案错误,点进去显示2,4,10,三个测试点错误,然后再次检查发现一个等号没写,补上后结果掉到12.5分了,前几天真题发布了,结果代码一模一样的显示测试点全过,CCF诗人吗
> 观前提示:瞎写的帖子,不喜勿喷。 > 等级:二级,愿望(非幻想):跳四级 > > > 考点:上海师范大学 > 关于考点 这次特地选的上师大,一是因为离家近(真的吗?),二是因为是大学,可以参观,而且上次在海事(上海海事大学)考的一级,88分。可能有大学的幸运加成吧...... > 考试前几周: 在我看来(注意,只是在我看来),我大概可能也许已经学到五级知识了(只是在我看来!),但实际上我只是个二级都没过的蒟蒻,所以我特别“努力”的复习着(其实刷完真题,就已经无所事事了),就这样浑浑噩噩的到了考前。 > 考试前一天: 12.27,考前最后一天,我仍旧没有危机感,还在自己玩KARDS和MC,结果被骂了一顿,才知道“复习”一下(还在玩)。 > 考试开始前: 12.28,要考试啦!我突然就很害怕,一下从美梦中惊醒(梦到考了98),我飞快的洗漱过后,乘7号线去了,但是,我要坐的两趟车都与我擦身而过——都在站台等了几分钟。导致最终到上师大时都已经快迟到了,再到找到考点所在地都已经迟到了!我的大脑白的像A4纸,双腿接替了脑子——我第一次连贯的爬五层楼,气喘吁吁地进入了机房。 > 考试进行中: 上师大的机比海事的大得多,非常壮观,天花板、墙壁、地板全是白色,像一片白色海洋。我找到位置,开始答题...... 选择题:没有很多恶心的多层循环模拟,显得简单,我一边检查(虽然什么也没检查出来)一边做题,在20分钟左右做完。 判断题:还行,总体难度正常,8分钟解决。 编程题:确实简单,第一题常规送分,直接顺序结构就行了。第二题经典循环嵌套,加了个小公式,需掌握几个数学函数。两题共10分钟解出,只各提交一次,轻松50满分。然后就在考场坐了20分钟,等着提交。旁边两个人,一个一级,一个二级。考一级的在看到编程题就已经放弃了,看着演算本瘫坐在位置上。另一个思考了一会儿最后一道题,在50分钟时做出来了,到了可以提交的时间,他也就走了。 > 考试结束后(放松阶段): 给家人报喜,大家都很愉快!(我偷吃了一堆放书包里的饼干) 随后,我们兜了圈上师大,又去旁边商场吃饭。 > 出成绩时: 96!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(此处省略100个感叹号) 小广告 团队简介:水团,转让了,求加入。虽然已经不是我的了
共23610条