`
lgh1992314
  • 浏览: 315606 次
文章分类
社区版块
存档分类
最新评论

关于对ACM OJ大数据递归栈溢出问题的解决方案

 
阅读更多
关于对ACM OJ大数据递归栈溢出问题的解决方案
Posted byThis_poeton 2012-08-15
编辑
问题来源

我在为参加NOIP的同学出模拟题的时候,免不得去BNU、HDU这些我校同学不常去的题库上面找题来强化或改编。今天我去找了BNU Contest上的一道题,涉及到需要缩环为点。显然,递归tarjan是缩环的最方便选择。然而,有时候题目当中的数据范围是N<=100000甚至更大,如果图是一条链的情况,程序用递归来实现一定会导致栈溢出。本文就将介绍如何解决这个问题。


解决方案

对于内存限制,除了SGU的OJ,各个题库所给出的限制一般是很宽松的(卡内存题目除外),最小也有32MB(32768KB)。然而,大部分评测机的栈空间限制只有2MB,稍微差一点的可能会是1MB甚至更小。因此,我们可以考虑把那些剩余的内存分配给栈空间,从而解决这种栈溢出的问题。对于pascal语言,$M语法可以解决这个问题,我们只需要在程序前面加上一句:


view source
print?

1

{$M 100000000}

这样就可以解决一般的栈溢出问题了。简单一看是一注释语句,可不要小看了“$”,这个符号让整个语句变成了一句命令。当然,如果你的程序陷入了无限递归当中,使用这个语句是没有办法自动解决的。这个语句是用来解决想要递归(有终止)地解决问题,数据较大,需要占用的占空间较大,然而又苦于栈内存分配得不够大的问题。其本质就是人工分配一下栈的内存大小。

pascal语言当中,问题圆满解决了。然而对于广大C++语言选手来说,问题还是没有解决,那么,C++语言当 中,有没有类似的语法呢?

答案是有的!

对于C++语言,我们可以在程序前面加上这样一句命令:


view source
print?

1

#pragma comment(linker, "/STACK:1024000000,1024000000")

这个语句到底是什么意思呢?援引一段百度百科上的解释:

#pragma comment( comment-type ,["commentstring"] )

comment-type是一个预定义的标识符,指定注释的类型,应该是compiler,exestr,lib,linker之一。

commentstring是一个提供为comment-type提供附加信息的字符串。

其实,这个命令和上面介绍的pascal语言当中的$M语句功能是一样的,目的就是人工分配内存为栈内存。 本文介绍的两个语句,就可以把内存当中空余的内存分配给栈,使一般正常操作的时候不会出现栈溢出的情况。

分享到:
评论

相关推荐

    acm递归算法总结竞赛

    10. **注意事项**:递归可能导致栈溢出,尤其是在没有正确设置终止条件或者问题规模过大的情况下。在编写递归代码时,应确保理解递归调用的过程,并对递归深度有所控制。 通过学习“acm递归算法总结”,参赛者可以...

    ACM基础算法之递归

    递归算法是ACM基础算法之一,通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。许多教科书都把计算机阶乘和菲波那契数列用来说明递归,但是这些例子并没有提供任何优越之处。 本文通过一...

    acm教程递归与分治

    递归和分治策略在算法设计中有着广泛的应用,它们能够帮助我们解决复杂问题,并且在某些情况下提供高效的解决方案。理解递归的基本原理和分治法的步骤是成为一名优秀的程序员的重要基础。在ACM竞赛和其他算法挑战中...

    浙大 acm oj 解题报告

    1. **题解分享**:解题报告中的CHM文档可能包含了他人对这些问题的思考和解决方案,是学习的好资料。 2. **模拟赛**:参与OJ的模拟赛可以提升应对压力的能力,同时也能了解自己的实力水平。 3. **刷题策略**:可以...

    ACM-9 递归及回溯1.pptx

    它们能帮助我们简洁地表达复杂的问题解决方案,但同时也需要注意避免无限递归和效率问题,如深度优先搜索(DFS)可能导致栈溢出,而回溯可能导致大量的无效计算。因此,在使用递归和回溯时,优化剪枝和空间使用是...

    郑州轻工业大学acm oj源码

    【郑州轻工业大学ACM OJ源码】是一个与编程竞赛相关的资源集合,主要针对的是ACM(国际大学生程序设计竞赛)在线评判系统(Online Judge,简称OJ)。这个压缩包包含的是郑州轻工业大学ACM团队在训练过程中所解决的...

    acm课件3 递归求解

    【递归求解】在ACM程序设计中,递归是一种强大的解决问题的方法,它通过将大问题分解为小规模的相同或相似问题来求解。递归通常涉及到函数的自我调用,每次调用处理更小的问题实例,直到达到基本情况,这时可以直接...

    acm迷宫递归问题源码

    知识点:ACM迷宫递归问题与回溯算法 标题中的“ACM迷宫递归问题源码”指向了一个在ACM(国际大学生程序设计竞赛)背景下的算法问题,主要涉及递归和回溯算法。这类问题通常是在一个迷宫环境中寻找从起点到终点的...

    ACM递归与递推

    ACM算法关于递归的概念和解决方法,递归算法用于解决的问题

    lanqiao_杭电ACMOJ解题报告_规划_

    【标题】"lanqiao_杭电ACMOJ解题报告_规划_" 涉及的是ACM(国际大学生程序设计竞赛)领域的编程题目解决策略和优化规划。在这个压缩包中,包含了不同类型的算法实现,旨在帮助程序员提高解决ACM竞赛问题的能力。 ...

    ACM国内外OJ网站(链接)

    ACM国内外OJ网站(链接)包括国内外知名大学的OJ网站,注册后登录答题即可。答题平台链接网站txt文件。

    ACM-OJ分类

    ACM竞赛是一个国际性的大学生编程比赛,旨在提高学生的算法设计、问题解决和编程能力。参赛队伍需要在5小时内解决一系列复杂的编程问题,这些问题通常涉及数学、数据结构、图论、动态规划等多方面的知识。 OJ系统是...

    acm 浙大oj代码

    在ACM比赛中,参赛者需要解决各种算法问题,而浙大OJ作为训练平台,提供了大量的题目供选手练习。这些代码可能是已通过评测的解决方案,能够帮助学习者理解如何运用不同的算法和数据结构来解决实际问题。 【标签】...

    ACM_OJ离线版_密码为1

    【标题】"ACM_OJ离线版_密码为1" 指的是一种专为ACM(国际大学生程序设计竞赛)爱好者和参赛者设计的离线在线判题(Online Judge,简称OJ)系统。这个系统允许用户在本地运行,无需互联网连接,可以方便地进行编程...

    ACM算法设计之递归与分治

    在算法设计领域,递归与分治是两种非常重要的策略,尤其在解决复杂问题时,它们能提供简洁而高效的解决方案。ACM(国际大学生程序设计竞赛)中,掌握这两种方法对于提升解题能力至关重要。 首先,让我们理解递归的...

    杭电ACM 题目分类 不完全 记录搜索,递归求解

    根据给定的信息,本文将对杭电ACM题目中的搜索与递归求解知识点进行详细的解析,特别是针对题目编号为1010、1016、1026、1043(双广)、1044(BFS+DFS)等题目进行深入分析,并涵盖其他相关的知识点。 ### 搜索技术...

    ACM.rar_acm zju 2830_acm 网站源码_acm.zju.edu.cn_浙大acm_浙大oj网站

    ACM竞赛要求参赛者在有限的时间内编写程序解决一系列复杂问题,这就需要对各种算法有深入理解和熟练运用,包括但不限于排序算法(如快速排序、归并排序)、搜索算法(如深度优先搜索、广度优先搜索)、动态规划、...

    非常经典的全国重点大学ACMOJ平台的题库和解答荟萃3(chm格式)

    非常经典的全国重点大学ACMOJ平台的题库和解答荟萃(chm格式),包括如下:西南交大ACM题库,杭电ACM题集,吉林大学ACM题集,浙大ACM题目和解答,NOCOW USACO,北大ACM题解,哈工大acm题及题解,PKU ACM 2001-4000答案...

    ACM递归与分治

    ACM递归与分治

    ACM网站大全(OJ+代码+贴吧)

    ACM竞赛要求参赛者在有限的时间内解决一系列算法问题,非常考验参赛者的编程技巧、算法设计能力和团队协作能力。 #### 二、在线评测系统(OJ)简介 在线评测系统(Online Judge, OJ)是一种用于自动评测程序设计...

Global site tag (gtag.js) - Google Analytics