第1个回答 2011-04-17
首先还是要看语言的吧 一般来说C/C++要比pascal快一些
我用C多一点 我个人的经验是运算次数上限大概在七八千万左右,这个值要根据评测环境浮动,一般来说在比赛时,我要卡时的时候会把时间控制在0.8s左右(我觉得基本上不会出现什么考试的机器比评测的机器差了好几个档次的吧///)
排序的话100W是极限(基本上必TLE,祈祷评测环境好一点的吧)
N^3 的500基本上也到极限了
线段树的话要看写法。。。。比如zkw线段树的常数就要比自顶向下递归的线段树小很多,而且也是要看题决定的。。。有些题线段树50W也能在1s中处理完
平衡树看种类了 treap和sbt都比较快 Splay稍慢但用处更大 (我相信NOI/NOIp中没有人用红黑树和AVL树吧) 基本上也是10W,20W的样子
二叉堆的话好像50W没问题,常数比较小
动态树什么的一般是Splay+Splay.....Splay的常数比较大。。。所以也就是四五万
其他制约时间的方面就基本上就是读入和储存之类的 因为寻找地址的关系。。。所以一维数组的操作比二维数组的操作快(dp中滚动数组优化时间的原理) 还有就是像楼上所写的i,j循环的顺序导致的时间差异(这是计算机自身储存方式决定的)
顺便说一下如果还要优化的话就是读入 比如fread > scanf > cin fread基本上是各神犇在OJ上优化程序时间效率的常用手段
还有一个就是函数的内联优化 就是说调用函数是要耗时间的 而采用函数的内容替代调用函数可以优化时间 (实际中可以用g++ 的 -o2编译)