原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-500.html

SRM500 Div1 500

没想到 double 的精度居然没有爆……

考虑以一个点为根的分形所涉及的区域是可以用一个矩形表示的。例如整个分形的区域就是 \(x\in [-27,27],y\in [0,81]\) 。

如果一个分形被要求的范围全部包含,那么是可以直接推公式求的。

如果一个分形代表的区域与询问区域无交,那么对答案无贡献。

否则就分治 3 个小矩形。

与询问矩形有交的分形区域比较少。所以时间复杂度是对的。

然后 double 居然没有被卡精度?

static const int N=505;
double ans,t;
void solve(double px,double py,int k,double x1,double y1,double x2,double y2){
if (k>30)
return;
double pmy=py+pow(t,k)/3*2;
double puy=py+pow(t,k);
double xL=px-pow(t,k+1);
double xR=px+pow(t,k+1);
if (x1<=xL&&xR<=x2&&y1<=py&&puy<=y2)
return (void)(ans+=(t*2*(500-k)+1.0/3.0)*pow(t,k));
if (xL>x2||xR<x1||py>y2||puy<y1)
return;
if (x1<=px&&px<=x2)
ans+=max(0.0,min(y2,pmy)-max(y1,py));
solve(px,pmy,k+1,x1,y1,x2,y2);
solve(pmy,-px,k+1,y1,-x2,y2,-x1);
solve(-pmy,px,k+1,-y2,x1,-y1,x2);
}
double getLength(int x1, int y1, int x2, int y2){
ans=0,t=1.0/3.0;
solve(0,0,0,x1*1.0/81.0-1e-15,y1*1.0/81.0-1e-15,x2*1.0/81.0+1e-15,y2*1.0/81.0+1e-15);
return ans*81.0;
}

TopCoder SRM500 Div1 500 分治的更多相关文章

  1. TopCoder SRM500 Div1 250 其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-250.html SRM500 Div1 250 题意 (看题用了半个小时--) 有 n 个人(编号 ...

  2. TopCoder SRM500 Div1 1000 其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-1000.html SRM500 Div1 1000 设 \(v_1,v_2,\cdots ,v_9 ...

  3. TopCoder SRM502 Div1 500 贪心 01背包

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-500.html SRM502 Div1 500 好题. 首先,如果已经确定了解决所有问题的优先级, ...

  4. Topcoder SRM 563 Div1 500 SpellCards

    题意 [题目链接]这怎么发链接啊..... 有\(n\)张符卡排成一个队列,每张符卡有两个属性,等级\(li\)和伤害\(di\). 你可以做任意次操作,每次操作为以下二者之一: 把队首的符卡移动到队 ...

  5. SRM 618 DIV1 500

    非常棒的组合问题,看了好一会,无想法.... 有很多做法,我发现不考虑顺序的最好理解,也最好写. 结果一定是两种形式 A....A   dp[n-1] A...A...A sgma(dp[j]*dp[ ...

  6. SRM 615 DIV1 500

    TC 都615了...时间过的真快啊. 第一次做出500分,心情还是很激动的,虽然看了很久的题解,TC官网上的题解,很详细,但是英语的...我搜了搜,发现一份日语的...好吧,我还是看看英语的吧... ...

  7. TopCoder 649 div1 & div2

    最近一场TC,做得是在是烂,不过最后challenge阶段用一个随机数据cha了一个明显错误的代码,最后免于暴跌rating,还涨了一点.TC题目质量还是很高的,非常锻炼思维,拓展做题的视野,老老实实 ...

  8. TopCoder SRM502 Div1 1000 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-1000.html SRM502 Div1 1000 题意 从 [0,n-1] 中选择 k 个不同的 ...

  9. topcoder SRM712 Div1 LR

    题目: Problem Statement      We have a cyclic array A of length n. For each valid i, element i-1 the l ...

随机推荐

  1. ASP.NET Core之NLog使用

    1.新建ASP.NET Core项目 1.1选择项目 1.2选择.Net版本 2. 添加NLog插件 2.1 通过Nuget安装 2.2下载相关的插件 3.修改NLog配置文件 3.1添加NLog配置 ...

  2. inode索引详解

    理解inode inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统操作水平,还有助于体会Unix设计哲学,即如何把底层的复杂性抽 ...

  3. swift 学习- 24 -- 协议 01

    // 协议 定义了一个蓝图, 规定了用来实现某一特定任务或者功能的方法, 属性, 以及其他需要的东西. // 类, 结构体, 或 枚举都可以遵循协议, 并且为协议定义的这些要求 提供具体的实现, 某个 ...

  4. cordova AndroidStudio3.0 升级报错问题

    http://blog.csdn.net/z_Xiaozuo/article/details/78962701 ionic3 打包 安卓项目遇到的问题,当时比较冲忙升级了下android studio ...

  5. 简化版的AXI-LITE4和配合使用的RTL

    ////////////////////////////////////////////////////////////////////////////////// // // The ZYNQ FI ...

  6. NIO(五)

    分散读取,聚集写入 package com.cppdy.nio; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import ...

  7. 爬虫----beautifulsoup的简单使用

    beautifulSoup使用: 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据. pip3 install beautifulsoup4 解析器 Beau ...

  8. bzoj 3566

    非常好也是比较难的题 首先,不难看出这是一道树形的概率dp 那么我们就要考虑转移 我们发现,一个点能充上电的概率是这个点本身通电的概率+这个点的子节点给他传过来电的概率+这个点的父节点给他传过来电的概 ...

  9. stylus入门教程,在webstorm中配置stylus

    转载:https://www.cnblogs.com/wenqiangit/p/9717715.html#undefined   stylus特点 富于表现力.具有健壮性.功能丰富.动态编码 不需要写 ...

  10. DevOps 在公司项目中的实践落地

    原文出处:https://www.cnblogs.com/beef/p/7743594.html ref: [DevOps]团队敏捷开发系列--开山篇 https://www.cnblogs.com/ ...