| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
终于找到了正确的方法!!! 狂赞这题!! 利用特殊性可以做到线性复杂度,见内In Reply To:尼马,simpson死活过不了 Posted by:xuhaoran510 at 2011-12-25 16:36:42 首先注意到所有的数都在整数格点上,而且半径只有两种,而且都很小。 我们可以发现,
一个0.58半径的圆只会影响到周围4格,一个1.31半径的圆只会影响到周围12格(见图)
半径1.31的影响范围 半径0.58的影响范围
.XX. ....
XXXX .XX.
XXXX .XX.
.XX. ....
于是发现,一个格子的状态(被覆盖的面积),仅仅取决于它周围的12个格子! 而这个状
态的数目,只有3^4*2^8=20736种!
于是写一个simpson暴力,把20736个状态预处理出来。但这一步要花大约2秒,会tle,
因此必须打表。
但直接打表会超代码长度限制。 我们观察这个表,发现连续的重复的段很多,于是用一个
简单的压缩,把一段相同的数(精确到5位小数就绰绰有余了)用二元组[a,b]表示出来
,a出现了b次。
然后进一步压缩,因为只出现了0~9,其他的字符都被浪费了,于是转成64进制(0~9,
A~Z,a~z和两个其他字符),这样一个二元组用5个字符就能表示了。
这时候表只有不到20K了,就可以装下了。
然后任务就简单了,一个圆只会影响到周围的格子,用hash表记录某个格子被影响的状态,
然后统计一下即可,整个过程是线性的。
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator