今天刷了4+0.5道题
窗口这一题是我昨天写的,那时只有80分,思路很简单:
算法:对每次的点击,从最高层向最底层进行范围判断,点到谁,就把谁放在最高层去,其他的相对位置不变(这部分思路相当于把要放在最高层的那一层抽出来,他前面的整体往后移一格,像玩积木一样),如果都不在,就输出特殊提示符。
数据结构:弄一个窗口结构体数组,包含两顶点坐标和编号
函数:弄了一个移动函数
但是很奇怪的是,我这样做只有80分,如果借鉴网上的思路:专门用一个数组存储从高到低层数的编号,移动也是针对这个数组进行移动,而结构体只是存储最初的按照编号排列的窗口信息,就可以满分。明明思路是一样的,而且我的也没有超时,超内存啥的,但就是没满分......
其他的,比如画图这一题,从算可重叠矩阵集的总面积,我刚开始本来想从数学上推导来着,后来发现就按照他画图的思路,弄一个二维数组来模拟就行了。
最骚的是Z字形扫描,写题的时候有些不在状态,写的有点久,后来来时弄出思路来了:
他其实关键的是“斜线”,如果光从结果来看的话,我们需要扫描的轨迹就是两条斜线+两个区域,斜线的话,一条叫“右上”,一条叫“左下”;方位的话一个叫左上角(包括中间最长的对角线),有个叫右下角。
具体而言:
我们的斜线一共2*n-1条(包括两个顶点),我们for 0 <= i < 2*n-1
当在左上角区域时,我们的斜线,
- 如果是右上:( a , 0 ) -> ( 0 , a )
- 如果是左下:( 0 , b ) -> ( b , 0 )
在右下区域时:(画一下坐标图就知道了)
- 如果是右上:( n-1 , i-n+1 ) -> (i-n+1 , a )
- 如果是左下:(i-n+1 , n-1 ) -> ( n-1 , n-1 )
注意,对于斜线上,从一个点换到下一个点时,横纵坐标都要同时变化,所以建议用while
但我第一次提交只有50......,查明原因发现,我把存储答案的数组设小了。
n最大500,我把500*500当成2500了...........,明明是250000,凸(艹皿艹 )