Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

终于找到了正确的方法!!! 狂赞这题!! 利用特殊性可以做到线性复杂度,见内

Posted by xuhaoran510 at 2011-12-25 19:03:12 on Problem 2950 and last updated at 2011-12-25 19:04:52
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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator