摘要: http://codility.com/demo/take-sample-test/pi2012又是一道单调栈的题目。首先这道题目n^2是最朴素的做法。继续优化,因为和顺序有关就不好排序。然后,看到可以分解成求左方向最值和右方向最值的问题。此时要变成O(n)就要么贪心,要么DP,要么单调栈,要么有更多规律未发现。这里有这么一个特点,考虑求左方向最值,当先有4,再有5之后,那么之前的4就没有意义了。所以用单调栈。如果用函数,代码可以更简洁。#include vector solution(const vector &A) { // write your code in C++98 i.. 阅读全文
posted @ 2013-11-21 23:50 阿牧遥 阅读(408) 评论(0) 推荐(0)
摘要: http://codility.com/demo/take-sample-test/hydrogenium2013用Dijkstra求最短路径,同时和D[i]比较判断是不是能到。用了优先队列优化,复杂度是(m+n)*log(n)。同时,写Dijkstra的时候一般要用dist数组,这里只拿它做访问标示。中间有个坑就是两个点之间可以多条路径,fail了半天。#include #include #define pp pairint solution(const vector &A, const vector &B, const vector &C, const vector 阅读全文
posted @ 2013-11-21 22:55 阿牧遥 阅读(230) 评论(0) 推荐(0)
摘要: http://codility.com/demo/take-sample-test/omega2013这题有点意思。首先经过思考,想到从底部往上扫,去迎接掉下来的disc。但这样仍然是不行的。后来看了答案,需要转化一下。因为从上往下看时,井里面下面大的圆都被上面小的圆遮住了,所以可以削去。int solution(vector &A, vector &B) { // write your code in C++98 for (int i = 0; i 0 && A[i] > A[i-1]) { A[i] = A[i-1]; } } ... 阅读全文
posted @ 2013-11-21 21:22 阿牧遥 阅读(177) 评论(0) 推荐(0)
摘要: http://codility.com/demo/take-sample-test/arrayinversioncount求逆序对数,归并排序并记录逆序次数。// you can also use includes, for example:// #include int merge(vector ... 阅读全文
posted @ 2013-11-21 12:24 阿牧遥 阅读(540) 评论(0) 推荐(0)