CCF每日刷题之每日吐槽(2020年12月2日20:56)

今天刷了4+0.5道题

窗口这一题是我昨天写的,那时只有80分,思路很简单:

算法:对每次的点击,从最高层向最底层进行范围判断,点到谁,就把谁放在最高层去,其他的相对位置不变(这部分思路相当于把要放在最高层的那一层抽出来,他前面的整体往后移一格,像玩积木一样),如果都不在,就输出特殊提示符。

数据结构:弄一个窗口结构体数组,包含两顶点坐标和编号

函数:弄了一个移动函数

但是很奇怪的是,我这样做只有80分,如果借鉴网上的思路:专门用一个数组存储从高到低层数的编号,移动也是针对这个数组进行移动,而结构体只是存储最初的按照编号排列的窗口信息,就可以满分。明明思路是一样的,而且我的也没有超时,超内存啥的,但就是没满分......

 

其他的,比如画图这一题,从算可重叠矩阵集的总面积,我刚开始本来想从数学上推导来着,后来发现就按照他画图的思路,弄一个二维数组来模拟就行了。

 

最骚的是Z字形扫描,写题的时候有些不在状态,写的有点久,后来来时弄出思路来了:

他其实关键的是“斜线”,如果光从结果来看的话,我们需要扫描的轨迹就是两条斜线+两个区域,斜线的话,一条叫“右上”,一条叫“左下”;方位的话一个叫左上角(包括中间最长的对角线),有个叫右下角。

具体而言:

我们的斜线一共2*n-1条(包括两个顶点),我们for 0 <= i <  2*n-1

当在左上角区域时,我们的斜线,

  1. 如果是右上:( a , 0 ) -> ( 0 , a )
  2. 如果是左下:( 0 , b ) -> ( b , 0 )

在右下区域时:(画一下坐标图就知道了)

  1. 如果是右上:( n-1 , i-n+1 ) -> (i-n+1 , a )
  2. 如果是左下:(i-n+1 , n-1 ) -> ( n-1 , n-1 )

注意,对于斜线上,从一个点换到下一个点时,横纵坐标都要同时变化,所以建议用while

 

但我第一次提交只有50......,查明原因发现,我把存储答案的数组设小了。

n最大500,我把500*500当成2500了...........,明明是250000,凸(艹皿艹 )

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值