找球面点,用k-d树,在不可能出现的长方体剪枝即可。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define Rep(i, x, y) for (int i = x; i <= y; i ++)
#define Dwn(i, x, y) for (int i = x; i >= y; i --)
#define RepE(i, x) for(int i = pos[x]; i; i = g[i].nex)
#define u t[x]
#define o t[y]
#define Lc t[u.lc]
#define Rc t[u.rc]
#define eps 0.00000001
#define eps2 0.00001
using namespace std;
typedef long long LL;
typedef double DB;
const int N = 67000;
struct P { int lc, rc, fl; DB d[3], mx[3], mn[3]; } t[N * 2], b[N], a;
int n, m, ans, D, T, pos[N], rt, q; DB A, B, qr, lt;
bool operator< (P x, P y) { return x.d[D] < y.d[D]; }
DB sqr(DB x) { return x * x; }
DB f(DB x) { return A * x - B * sin(x); }
void F(DB &x, DB l = -100, DB r = 100) {while (l + eps < r) {DB mid = (l + r) / 2;if (f(mid * lt + 1) > x) r = mid;else l = mid;} x = (l + r) / 2;
}
int sqn(DB x, DB y) {if (x - y > 0.00001) return 1;return (x - y < -0.00001) ? -1 : 0;
}
DB Dis(P x, P y) { DB tmp = 0; Rep(i, 0, 2) tmp += sqr(x.d[i] - y.d[i]); return tmp; }
struct Kdtree
{DB Get(int x, P p) {DB tmp = 0; Rep(i, 0, 2) tmp += sqr( max(0.0, u.mn[i] - p.d[i]) + max(0.0, p.d[i] - u.mx[i]) );return tmp;}DB G2(int x, P p) {DB tmp = 0; Rep(i, 0, 2) tmp += sqr( max(u.mx[i] - p.d[i], p.d[i] - u.mn[i]) );return tmp;}void Upd(int x, int y) {Rep(i, 0, 2) u.mx[i] = max(u.mx[i], o.mx[i]), u.mn[i] = min(u.mn[i], o.mn[i]);}int Build(int l, int r, int now) {D = now; int x = l + r >> 1;nth_element(b + l, b + x, b + r + 1);u = b[x]; pos[ u.fl ] = x; Rep(i, 0, 2) u.mx[i] = u.mn[i] = u.d[i];if (l < x) u.lc = Build(l, x - 1, (now + 1) % 3), Upd(x, u.lc);if (x < r) u.rc = Build(x + 1, r, (now + 1) % 3), Upd(x, u.rc);return x;}void Add(int x, int now) {if (a.d[now] < u.d[now]) {if (u.lc) Add(u.lc, (now + 1) % 3);else {u.lc = ++ m, t[m] = a;Rep(i, 0, 2) t[m].mx[i] = t[m].mn[i] = t[m].d[i];} Upd(x, u.lc);} else {if (u.rc) Add(u.rc, (now + 1) % 3);else {u.rc = ++ m, t[m] = a;Rep(i, 0, 2) t[m].mx[i] = t[m].mn[i] = t[m].d[i];} Upd(x, u.rc);}}void Qry(int x) {if (!x || ans) return ;DB d0 = Dis(u, a);if (u.fl > 0 && sqn(d0, qr) == 0) { ans = u.fl; return ; }DB dl = Get(u.lc, a), dr = Get(u.rc, a), d1 = G2(u.lc, a), d2 = G2(u.rc, a);if (d1 < d2) {if (dl < qr + eps2 && d1 + eps2 > qr) Qry(u.lc); if (dr < qr + eps2 && d2 + eps2 > qr) Qry(u.rc);} else {if (dr < qr + eps2 && d2 + eps2 > qr) Qry(u.rc); if (dl < qr + eps2 && d1 + eps2 > qr) Qry(u.lc);}}void Del() {int x = pos[q]; u.fl = 0;Rep(i, 0, 2) u.mn[i] = Lc.mn[i], u.mx[i] = Lc.mx[i]; Upd(x, u.rc);}
} Kd;
int main()
{scanf ("%d%d%lf%lf", &n, &T, &A, &B);Rep(i, 1, n) {scanf ("%lf%lf%lf", &b[i].d[0], &b[i].d[1], &b[i].d[2]); b[i].fl = i;}rt = Kd.Build(1, n, 0); m = n, lt = 0.1;while (T --) {int ty; scanf ("%d", &ty);if (!ty) {DB tmp;scanf ("%lf%lf%lf%lf", &tmp, &a.d[0], &a.d[1], &a.d[2]);Rep(i, 0, 2) F(a.d[i]);F(tmp, 0, n), q = int(tmp + 0.5);a.fl = q; Kd.Del(), Kd.Add(rt, 0); pos[q] = m;} else {scanf ("%lf%lf%lf%lf", &a.d[0], &a.d[1], &a.d[2], &qr);Rep(i, 0, 2) F(a.d[i]); F(qr, -600, 600); qr = qr * qr;ans = 0, Kd.Qry(rt); printf("%d\n", ans); lt = ans;}}return 0;
}

【bzoj 3815】卡常数相关推荐

  1. 数字黑洞水仙花数6174卡普耶卡变换,卡布列卡常数归敛

    今天在头条上刷到一篇文章,挺有趣,不想点连接的话我直接把文章考过来了,不知道算不算侵权 头条文章链接 全文: 解析神秘数学黑洞"6174" 或许你早就听过这个故事:有一个神秘的数学 ...

  2. 【bzoj3240 洛谷P1397】矩阵游戏[NOI2013](矩阵乘法+卡常)

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3240 这道题其实有普通快速幂+费马小定理的解法--然而我太弱了,一开始只想到了矩阵乘法的 ...

  3. bzoj 4404 [Neerc2015]Binary vs Decimal题解

    首先声明这题不打表可以过的..只是我太笨了 先说下做法 我们可以从一个合法的数XT,T是XT的后缀,那么T也是合法的 我们得到一个合法的T,可以去试一下XT是否合法 暴力枚举: //Copyright ...

  4. 欧拉降幂 ---- 2020 杭电多校[E - Fibonacci Sum]+欧拉降幂+和式的调整+二次剩余+毒瘤卡常

    解题思路: 首先你得知道斐波那契的通项式子:首先你得知道斐波那契的通项式子:首先你得知道斐波那契的通项式子: F(n)=15[(1+52)n−(1−52)n]F(n) = {1\over\sqrt5} ...

  5. BZOJ 4086: [Sdoi2015]travel(SDOI2015 round2 day1)(分类讨论+容斥原理)

    描述:给定一张图(n<1000,m<5000)求有多少点对u,v有不重复经过其他点,共经过k个点的路径.(k<=7) 这个做法应该不是正解吧..顺便说下SDOI的几道题在BZ上都要卡 ...

  6. bzoj 2962 序列操作 线段树

    这个题卡常数.. 首先c比较小,所以可以考虑dp转移,对于合并子序列就直接枚举跨区间的就可以了 对于反转操作,要注意只有奇数位置才会变成相反数 对于增加操作,可以考虑抽象成组合数学问题: 对于(a1+ ...

  7. 洛谷P5072 [YNOI2015]盼君勿忘 莫队+unordered_set+毒瘤卡常

    在太阳西斜的这个世界里,置身天上之森.等这场战争结束之后,不归之人与望眼欲穿的众人, 人人本着正义之名,长存不灭的过去.逐渐消逝的未来.我回来了,纵使日薄西山,即便看不到未来,此时此刻的光辉,盼君勿忘 ...

  8. 数字黑洞6174(Kaprekar常数)之java演示

    1 简介 数字黑洞6174,也称"卡谱耶卡常数"(Kaprekar). 任意选一个四位数(数字不能完全相同),把所有的数字从大到小排列,再把所有数字从小到大排列,用前者减去后者,得 ...

  9. BZOJ 3309: DZY Loves Math

    Description 对于正整数 n n,定义f(n)f(n)为 n n所含质因子的最大幂指数.例如f(1960)=f(23∗51∗72)=3f(1960)=f(2^3 * 5^1 * 7^2)=3 ...

  10. 简单的卡常数【OI缩水版】

    一.为什么要卡常数? OI中数据结构与常数优化关系很大的 如果你常数好可以暴力过数据结构题啦~ 如果你常数不好即使复杂度一样也会被出题人卡~ 二.常用的卡常数方法 1.卡IO(输入输出) 比较简单的写 ...

最新文章

  1. Java中的“可运行的实现”与“扩展线程”
  2. 【LeetCode从零单排】No.7 Reverse Integer
  3. 常用正则表达式,来自新浪微博的js
  4. 缺乏运动 七种病早早光临
  5. ROS修改pkg名和node名教程
  6. phpcms v9 index.php,Phpcms V9后台登录地址修改方法
  7. python-unittest学习2--生成报告
  8. Ubuntu16.04 安装Teamviewer
  9. 网友发给我一个钓鱼网站,我用 Python 渗透了该网站所有信息
  10. vue项目element-ui中el-select回车键隐藏下拉框,实现按回车键查询
  11. 你的Android HTTPS真的安全吗?
  12. java中CheckException和UnCheckException的区别
  13. js将 一串数字1403149534转换为日期格式
  14. input输入框无法输入值的解决方案
  15. 一款【免费+简单+好用+性能强大】的词云(Wordcloud)制作工具(含详细介绍)
  16. 一个优秀的平面设计作品需要满足那些特点
  17. OSPF与BGP协议流程与协议格式简单学习
  18. 微信小程序:十二星座运势查询
  19. Spring和Spring的配置
  20. C语言基础之4:字符串和格式化输入/输出

热门文章

  1. 数据库实验一:创建数据库和表
  2. 当新华社遇上华为云 权威新闻全球传播再添“神器”
  3. python生成图文并茂的pdf--财务报表(三)--页面布局和排版
  4. C++ 无法打开包括文件“mysql.h“: No such file or directory
  5. 一款在线画图工具的使用(推荐)
  6. 单片机花灯开关控制器C语言代码,以51单片机为核心的LED彩灯控制器设计
  7. 黄杏元《地理信息系统概论》考研复习考点精讲(三)
  8. logogogo最新变种XP.exe的分析(Win32.Logogo)
  9. 计算机文化基础练习题及答案
  10. 哈尔滨理工大学计算机学院竞赛,计算机学院成功举办学院Arduino创意设计竞赛...