`
qq1214917885
  • 浏览: 9166 次
文章分类
社区版块
存档分类
最新评论
文章列表
二分法的关键在于对“=”的判断选取范围。例如对于目标task这样寻找: while (l <= r) { int mid = (l + r) / 2; if (mid < task) l = mid + 1; else r = mid - 1; } printf("%d\n", l); 这里选择了将mid == task 的情况放入mid > task的情况。因为最后输出的用的是l ...
BFS是从起点开始,对每一步的同一层分别加入队列中,进行下一层的搜索判断,直到搜到目标为止。。 细节注意: 1,临界问题,定义数组后,对于下标m,0可以使用,而m是不可使用的。即判断时应为: if (x < 0 || x >= m) 此处若>=写成>则会造成一次runtimr error; 2,坐标处理:为使代码可视化,可以先定义两个数组,例如每次只能移动一格,有: int mx[4] = {0, 0, -1, 1}; int my[4] = {1, -1, 0, 0}; 然后用一个for循环依次对坐标赋值即可; 3,坐标数据处理:一般坐标会出现负值,但坐标一般会用到二 ...
第一道BFS的题。 感觉主要是队列思想,只要按照一层层的顺序依次加入队列中进行展开即可。另外标记是否展开过。。BFS和DFS不同。BFS是要同一层的展开完了之后再进行下一层的展开的。因为使用先进先出的队列实现。 不过题目的通性还是一样,要注意边界的条件。比如这个题是要达到>=0而不是>0的。 另外,注意多函数的使用划分功能。。。结果一般都是直接寻址的。
由此题想出: 一般这类题会这样几种: 第一种,此题所给的例子数据算是比较好的,是属于规律的范围。即给了4 和5 的测试数据。。这样分析起来容易找到规律。但是要注意的是前面的几项是否也会满足该条件,不要遗漏了。否则一直WA也不知道什么情况!例如本题的1,2,3要特殊考虑。 第二种,题目给的数据既有特殊的又有普遍的,那么就要靠自己去模拟一下过程。实在特殊复杂的可以转化成第三种,但测试数据一定要严谨全面,否则易错。 第三种,题目给的数据实在复杂,模拟过程也相当复杂,但是可以直接或间接得到通式。那么就可以试着用暴力写写,再来找找规律(打表找规律)。 另外。 在代码中直接使用二进制运算符可以提高运行效率 ...
对于1078,要先理解题意,并动手把题目的式子列出来。这样方便分析。 然后再仔细看题目,与问题,与条件之间的关系。 坑点1:题目给的是加密过程,要求我们的是解密。 坑点2:题意歧义,原码指的是该字母本身的原码; 该题的收获呢,就是又学到了一些容易出错的坑点和一个解题的思路。 写出了式子对应题目要求之后发现 for (i = 1; i < len; i++) { b[i] = a[i] - 32 + 96 + 32 + 32 - a[i-1]; if (((b[i] - 32 + a[i-1] - 32))%96 + 32 == a[i]) ...
SCHOOL OJ 11159 分析此题,看一下数据,4亿的数值,循环暴力解的话肯定会超时。而对于这种类似数位统计的题目,应该要逐位分析看看,看能不能找到什么规律。 突破口知识点:m个连续的数分别%m之后必然是得到0~m-1的数; 而m个连续的数各加上一个相同的数X后得到的数依旧是连续的m个数,再%m得到的依旧是0~m-1的数。 就如此题。一个区间[a,b],而每次都有%10,那么就先以10个数为单位看一下是否有规律。 首先取a = 0, b = 9; 得到F = (0*2)%10 + 1%10 + (2*2)%10 + 3%10 + (4*2)%10.......看每个被取余的数的个位,其实 ...
    今天水了一道排序题。学会了快排的方法。快排并不仅仅是分治,还要有随机。因为考虑到一些特殊的case可能会影响复杂度。先讲一下快排的分治思想吧。。。     在一个给定的数列中,从第一个数开始,依次往后,每当小于数列最后一个数(此数最好是由随机数产生)时,便记录下来,最后将最后一个数与刚才最后一个的后一个数进行exchange。那么一次下来。就变成了三部分,两个数列和一个数,前一部分虽是乱序,但均比某个数小。。。而后一部分则均比某一个数大。。。那么由此,就可以想到。不断的递归下去。不断的划分。到最后,就可以将原来的数列分成许多小部分。每一个部分由3个数组成。“小,中,大”,并依次排序。。。 ...
    学习了一些基础知识之后,也开始了OJ之旅。没有丝毫刷题经验的我经历了N次的WA,在不断的修改之后,也体验到了AC的快感。下面是个人做的前几道题的一些总结和收获。第一点,仔细了解题意并掌握在OJ上固定的输入输出格式,这个对于初学者来说是宝贵的经验。第二点,在思考做数据处理时的条件设置时,应该思考出能够进行分类的条件判断,然后选择一种更为特殊的作为if语句,而剩下的尽量让它能使用else,避免使用多个if,选定多种情况,然后遗漏并且这样还会降低AC率。。第三点,在OJ上不断WA下重新输入测试数据是相当麻烦的。应该使用文件输入输出,并思考出一些具有代表性的临界数据作为测试,再针对性的对自己的代 ...
Global site tag (gtag.js) - Google Analytics