漂浮法,顾名思义,就是一块块的往上飘。
以逆序来进行放置,即n to 1。逆序的好处在于放置一个矩形后,俯视看到的就是最终俯视该矩形应该看到的。因为挡着它的矩形在之前已经放置好了,所以可直接统计,为递归创造了条件。每放一个矩形,可以想象成将其扔入一密度很大的海水底部,海分成了n层,然后矩形开始向上浮。在上浮过程中若碰撞到其他的矩形则断裂成几个小矩形,继续上浮,直到浮出水面。于是想到用个递归来模拟...
大数乘法的步骤(先戳我看看大数加法的思想):
首先是输入2个数据,并且逆序,还要去掉前导0。比较大小:
相等的话,结果为0。前者大于后者,则直接进行减法运算。前者小于后者,则用后者减去前者,最后在结果前面添上负号。
从最高位开始输出结果。
#include
#include
#define MAX 1000
using namespace std;
void InputNu...
分类:
其他好文 时间:
2014-04-30 22:17:40
阅读次数:
231
题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=2418解题报告:就是给你n个数,然后让你求这个数列的逆序对是多少?题目中n的范围是n
< 500000,所以,暴力是不行的。还是第一次学会用线段树求逆序数,这种方法的时间复杂度是n * lo...
分类:
其他好文 时间:
2014-04-29 21:38:23
阅读次数:
463
大数乘法的步骤(先戳我看看大数加法的思想):
首先我们输入要相乘的2个数字,然后逆序。用2层循环来相乘,把下标[i]*[j]计算的结果放在下标[i*j-1]中(下标从1开始),建议及时处理进位问题(char字符范围比较小)。
最后从高位开始输出。
#include
#include
#define MAX 1000
using namespace std;
void InputN...
分类:
其他好文 时间:
2014-04-28 10:24:42
阅读次数:
371
居然没有想出来,唉。
归正传。这题就是在求一串数在每次只能对调相邻两位时,要得到其逆序最少要移动多少次。
在直线上移动很简单,类似于冒泡排序的方法,一个数不断向上冒,直到最终位置。不难得到其需要移动的次数公式为n*(n-1)/2。其中n为总点数。
那么在圆环上移动又会如何呢?应该会不一样这是我们直观的感受。事实也是如此,移动的过程是将圆环分为两段,分别移动。那么又在何处分段呢?
答案是尽量...
分类:
其他好文 时间:
2014-04-27 21:26:07
阅读次数:
324
对一句话里面的单词进行reverse,标点符号位置不变。符号包括:,.!?
例:输入:Hello, my dear friend! 输出:olleH, ym raed dneirf!
思路:由于需要逆序输出,因此想到利用栈数据结构来实现。代码如下(调试环境:VS2013):
分类:
其他好文 时间:
2014-04-27 21:05:01
阅读次数:
596