好久好久我都没有刷题了。

题目の传送门:https://www.luogu.org/problem/show?pid=2778

题目大意:(啥 题目讲得不够清楚?)平面内有n个以整点(就是坐标都是整数的点啦~)为圆心、互不相交或相切的圆,现给出q组询问,查询连接两个整点至少要跨过多少圆。

这题嘛,我们可以得出很显然的结论:
1. 对于一个圆,如果A和B都不在圆内,则该圆可以被忽略。
2. 对于一个圆,如果A和B都在圆内,则该圆可以被忽略。
3. 一个圆被考虑,当且仅当AB二人中有且只有一人在圆内。

然后我们就可以乱搞了= =
我们对于每个询问,通过解析几何的公式暴力判断每个圆的求出点是否在圆内即可。
公式:

//设p为点,o为圆心
dis(p,o)<=o.r
dis(p,o)=sqrt(sqr(p.x-q.x)+sqr(p.y-q.y))

对 就这样 时间复杂度O(nq),8000会卡(说好的大数据时限3s显然是tan(π/2))
所以交上去会TLE 4个点,这时候就要手动开O3了(微笑)

代码(呵呵,我就是故意的2333):

QAQ ____{_w_ _,__,___;}OvO[o];QAQ ___{_w_ _,__;}OwO,O_O;_w_ w_v_w(___ _,____ __){w_w _(_._-__._)+_(_.__-__.__)<__.___;}
_w_ main(){_w_ qwq,owo,TAT; _v_(qwq);_____(qwq){_v_(OvO[_]._);_v_(OvO[_].__);_v_(OvO[_].___);OvO[_].___*=OvO[_].___;}_v_(owo);_____(owo){TAT=ovo;_v_(OwO._);_v_(OwO.__); _v_(O_O._); _v_(O_O.__);_____(qwq)w_v_w(OwO,OvO[_])-w_v_w(O_O,OvO[_])?++TAT:ovo;v_v(TAT);}}

什么,你说你看不懂?
给你加点必要的提示?

#define _(w)        ((w)*(w))
#define QAQ struct
#define _w_ int
#define w_w return
#define orz main
#define _v_(w) scanf("%d",&w);
#define v_v(w) printf("%d\n",w);
#define o 8008
#define _____(v) for(int _=1;_<=v;_++)
#define ovo 0

加起来就是这样

#include <cstdio>
#define _(w) ((w)*(w))
#define QAQ struct
#define _w_ int
#define w_w return
#define orz main
#define _v_(w) scanf("%d",&w);
#define v_v(w) printf("%d\n",w);
#define o 8008
#define _____(v) for(int _=1;_<=v;_++)
#define ovo 0
QAQ ____{_w_ _,__,___;}OvO[o];QAQ ___{_w_ _,__;}OwO,O_O;_w_ w_v_w(___ _,____ __){w_w _(_._-__._)+_(_.__-__.__)<__.___;}
_w_ main(){_w_ qwq,owo,TAT; _v_(qwq);_____(qwq){_v_(OvO[_]._);_v_(OvO[_].__);_v_(OvO[_].___);OvO[_].___*=OvO[_].___;}_v_(owo);_____(owo){TAT=ovo;_v_(OwO._);_v_(OwO.__); _v_(O_O._); _v_(O_O.__);_____(qwq)w_v_w(OwO,OvO[_])-w_v_w(O_O,OvO[_])?++TAT:ovo;v_v(TAT);}}

什么,你说你还看不懂,算了我给你翻译一下吧(其实上面就是抖个机灵,不过我就是这么交的2333)。。

#include <cstdio>
#define sqr(a) ((a)*(a))
struct circle{
int x,y,r;
}cir[8008];
struct zb{
int x,y;
}a,b;
int judge(zb u,circle v){
return sqr(u.x-v.x)+sqr(u.y-v.y)<v.r; //这里的r是自乘过的(后面的处理),所以没有平方
}i int main(){
int q,n,s; scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d%d",&cir[i].x,&cir[i].y,&cir[i].r);
scanf("%d",&q);
for(int i=1;i<=q;i++){
s=0;
scanf("%d%d%d%d",&a.x,&a.y,&b.x,&b.y);
for(int j=1;j<=n;j++){ //好吧其实我也不知道刚才玄学代码里面循环变量一样是怎么A掉的
if(judge(a,cir[j])==judge(b,cir[j]));
else s++; //上面的玄学代码用三目运算符就是记这么写的……
}
printf("%d\n",s);
}
}

嗯 就是这样= =
哦 题解里面还有一个官方std解法(显然那才是玄学解法嘛)

转自luogu题解……
作者: qq2477259579 更新时间: 2017-01-02 22:26

把平面上每一个区域看作一个结点,最外层没有边界的区域也看作一个结点。如果一个区域刚好被另外一个区域直接包含,则连边。构成的图上做最短路径即可以得到40~60的分数。
又发现,上述得到的图是树结构的,在树上预处理好任意两点的最近公共祖先,之后的询问可以线形完成,这便可以得到满分。
哇 代码你们自己去题解里找吧,我理解能力有限_ (:з」∠) _

我代码到底会不会写得更丑啊= =

【学术篇】luogu2778 [AHOI2016初中组]迷宫(代码高能!)的更多相关文章

  1. [AHOI2016初中组]迷宫

    题目描述 小雪和小可可被困在了一个无限大的迷宫中. 已经知道这个迷宫有 N 堵环状的墙,如果把整个迷宫看作是一个二维平面,那么每一堵墙都是平面上一个圆.任意两个圆不相交,不重合,也不会相切, 但有可能 ...

  2. iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)   这里我们就直接上实例: 一:新建一个项目singleV ...

  3. JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇

    JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇 作为一个使用Java语言开发的程序员,我们都知道,要想运行Java程序至少需要安装JRE(安装JDK也没问题).我们也知道我们Java程序 ...

  4. 【学术篇】luogu3768 简单的数学题(纯口胡无代码)

    真是一道"简单"的数学题呢~ 反演题, 化式子. \[ ans=\sum_{i=1}^n\sum_{j=1}^nijgcd(i,j) \\ =\sum_{i=1}^n\sum_{j ...

  5. c++ LeetCode (初级字符串篇) 九道算法例题代码详解(二)

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11089327.html 已经刷了很多篇leetcode题了,不过最近在找c++的实习工作(大佬 ...

  6. XLNet预训练模型,看这篇就够了!(代码实现)

    1. 什么是XLNet XLNet 是一个类似 BERT 的模型,而不是完全不同的模型.总之,XLNet是一种通用的自回归预训练方法.它是CMU和Google Brain团队在2019年6月份发布的模 ...

  7. 【学术篇】51nod 1238 最小公倍数之和

    这是一道杜教筛的入(du)门(liu)题目... 题目大意 求 \[ \sum_{i=1}^n\sum_{j=1}^nlcm(i,j) \] 一看就是辣鸡反演一类的题目, 那就化式子呗.. \[ \s ...

  8. 【学术篇】一些水的不行的dp

    最近做了几道非常水非常水的dp...... 之后刷的一些水dp也会写在这里...... 此篇题目难度不递增!!! Emmmm....... 1.luogu1043数字游戏 以前看过这个题几遍,没做这个 ...

  9. Java迷宫代码,深度优先遍历

    此次迷宫深度优先遍历寻找路径采用栈结构,每个节点都有固定的行走方向(右下左上),除非一个方向走不通,不然会一条道走到黑. 如果路径存在,打印出行走路径,否则打印出迷宫不存在有效路径. 方向常量定义: ...

随机推荐

  1. Noip 2012 day2t1 同余方程

    Description 求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解. Input 输入文件为mod.in. 输入只有一行,包含两个正整数 a, b,用一个空格隔开. Output 输 ...

  2. CSDN首页> 云计算 孙玄:解析58同城典型技术架构及演变

    转:http://www.csdn.net/article/2015-04-09/2824437 在UPYUN主办的“UPYUN Open Talk”第三期北京站上,58同城系统架构师孙玄详细介绍了5 ...

  3. 全面解读PHP面试

    php面试考察点    1.PHP基础知识 引用变量 常量及数据类型 运算符及流程控制 自定义函数及内部函数 正则表达式 文件及目录处理 会话控制 面向对象 网络协议 开发环境相关考点 2.JavaS ...

  4. 在Word中如何自动生成参考文献引用

    来自:在Word中如何自动生成参考文献引用 在写毕业论文时,参考文献动辄就有四五十篇,在文中对照参考文献逐一引用是一件十分痛苦的事情,而且一旦参考文献的顺序发生变化,文中的引用也要逐个修改,那么,我们 ...

  5. 剑指offer——18打印从1到最大的n位数

    题目: 输入数字n,按顺序打印出从1到最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数999. 题解: 注意大数溢出问题,故使用字符串更靠谱 class Solution { pu ...

  6. 查看Linux服务器公网IP

    参考:https://www.cnblogs.com/pyyu/p/8545896.html 方法1:curl ifconfig.me 方法2:curl cip.cc

  7. sql 递归查询,刁刁的

    with cte as( select IDPlus,SuperiorsIDPlus,RoleGrade,viplevel,NAME,WeixinId from Member where IDPlus ...

  8. List<> ,string[]和string的相互转换

    1.string转换成string[]数组 string str = "aaa,bbb,ccc,dddd"; string[] strs = str.Split(','); 2.s ...

  9. 2019 Multi-University Training Contest 3 B 支配树

    题目传送门 题意:给出衣服有向无环图(DAG),,定义出度为0的点为中心城市,每次询问给出两个点,求破坏任意一个城市,使得这两个点至少有一个点无法到达中心城市,求方案数. 思路:首先建立反向图,将城市 ...

  10. 【转】40个Java多线程问题总结

    文章转自 五月的仓颉 http://www.cnblogs.com/xrq730/p/5060921.html 前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习, ...