BZOJ4858 : [Jsoi2016]炸弹攻击 2
枚举每个$S$作为原点,将所有$D$和$T$极角排序。
枚举每个$T$,那么另一个$T$需要和当前的$T$夹角不超过$180$度,贡献为内部$D$的个数。
双指针后用前缀和查询区间的贡献即可。
时间复杂度$O(n^2\log n)$。
#include<cstdio>
#include<algorithm>
const int N=810;
int D,S,T,i,j,k,cnt,s[N*4],f[N*4],g[N*4];long long ans;
struct P{
int x,y,t;
P(){}
P(int _x,int _y,int _t){x=_x,y=_y,t=_t;}
int sgn()const{return x?x>0:y>0;}
}a[N],b[N],c[N],e[N*4];
inline bool cmp(const P&a,const P&b){
if(a.sgn()!=b.sgn())return a.sgn()<b.sgn();
return 1LL*a.x*b.y<1LL*a.y*b.x;
}
int main(){
scanf("%d",&D);
for(i=1;i<=D;i++)scanf("%d%d",&a[i].x,&a[i].y);
scanf("%d",&S);
for(i=1;i<=S;i++)scanf("%d%d",&b[i].x,&b[i].y);
scanf("%d",&T);
for(i=1;i<=T;i++)scanf("%d%d",&c[i].x,&c[i].y);
for(i=1;i<=S;i++){
cnt=0;
for(j=1;j<=D;j++)e[++cnt]=P(a[j].x-b[i].x,a[j].y-b[i].y,0);
for(j=1;j<=T;j++)e[++cnt]=P(c[j].x-b[i].x,c[j].y-b[i].y,1);
std::sort(e+1,e+cnt+1,cmp);
for(j=1;j<=cnt;j++)e[j+cnt]=e[j];
for(j=1;j<=cnt*2;j++){
s[j]=s[j-1],f[j]=f[j-1],g[j]=g[j-1];
if(e[j].t)f[j]++,g[j]+=s[j];else s[j]++;
}
for(j=k=1;j<=cnt;j++)if(e[j].t){
if(k<j)k=j;
while(k+1<j+cnt&&1LL*e[j].x*e[k+1].y<=1LL*e[j].y*e[k+1].x)k++;
ans+=g[k]-g[j]-s[j]*(f[k]-f[j]);
}
}
return printf("%lld",ans),0;
}
BZOJ4858 : [Jsoi2016]炸弹攻击 2的更多相关文章
- loj#2076. 「JSOI2016」炸弹攻击 模拟退火
目录 题目链接 题解 代码 题目链接 loj#2076. 「JSOI2016」炸弹攻击 题解 模拟退火 退火时,由于答案比较小,但是温度比较高 所以在算exp时最好把相差的点数乘以一个常数让选取更差的 ...
- [LOJ 2082] 「JSOI2016」炸弹攻击 2
[LOJ 2082] 「JSOI2016」炸弹攻击 2 链接 链接 题解 枚举发射源,将发射源当做原点,对敌人和激光塔极角排序. 由于敌人纵坐标均为正,而其它点均为负,因此每两个角度差在 \(\pi\ ...
- 【LOJ】#2082. 「JSOI2016」炸弹攻击 2
题解 想到n3发现思路有点卡住了 对于每个发射塔把激光塔和敌人按照极角排序,对于一个激光塔,和它转角不超过pi的激光塔中间夹的敌人总和就是答案 记录前缀和,用two-Points扫一下就行 代码 #i ...
- 【LOJ】#2076. 「JSOI2016」炸弹攻击
题解 我冷静一下,话说如果去掉建筑和R的限制好像是模拟退火吧 然后开始写模拟退火了,起始点就随机一个敌人作为起始点 没对着数据写了一下获得了70pts,感到美滋滋 然后对着数据卡了很久--发现有个数据 ...
- LOJ#2082. 「JSOI2016」炸弹攻击 2(计算几何+双指针)
题面 传送门 题解 我们枚举一下发射源,并把敌人和激光塔按极角排序,那么一组合法解就是两个极角之差不超过\(\pi\)且中间有敌人的三元组数,预处理一下前缀和然后用双指针就行了 //minamoto ...
- LOJ#2076. 「JSOI2016」炸弹攻击(模拟退火)
题面 传送门 题解 退火就好了 记得因为答案比较小,但是温度比较高,所以在算\(\exp\)的时候最好把相差的点数乘上一个常数来让选取更劣解的概率降低 话虽如此然而我自己打的退火答案永远是\(0\)- ...
- loj#2071. 「JSOI2016」最佳团体
题目链接 loj#2071. 「JSOI2016」最佳团体 题解 树形dp强行01分规 代码 #include<cstdio> #include<cstring> #inclu ...
- 【BZOJ4755】 [Jsoi2016]扭动的回文串
BZOJ4755 [Jsoi2016]扭动的回文串 Solution 考虑对于他给出的 A中的一个回文串: B中的一个回文串: 或者某一个回文的扭动字符串S(i,j,k) 这样子几个限制,我们1,2就 ...
- BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划
BZOJ 4753 [Jsoi2016]最佳团体 | 树上背包 分数规划 又是一道卡精度卡得我头皮发麻的题-- 题面(--蜜汁改编版) YL大哥是24OI的大哥,有一天,他想要从\(N\)个候选人中选 ...
随机推荐
- 任务超时退出的方法 C#
超出时间方法退出.防止卡住. 方法: private static bool ImportTaskTimeout(Action method, int hours) { try { var task ...
- python with语句中的变量有作用域吗?
一直以为python中的with语句中的变量,只在with语句块中起作用.不然为什么要缩进一个级别呢? 呵呵,然而并没有为with语句内的变量创建新的作用域. 举例: # test.py with o ...
- github协作开发遇到的问题
1.十一来了,帝都不好买票,30号就调休一天回去了,项目还没搞完,紧张的不行,就自己和同事搞了一个github协作开发,由于是功能和公司项目不是很沾边,但是是自己的主要工作,就和同事协调了一下,搭建了 ...
- Pytorch LSTM 词性判断
首先,我们定义好一个LSTM网络,然后给出一个句子,每个句子都有很多个词构成,每个词可以用一个词向量表示,这样一句话就可以形成一个序列,我们将这个序列依次传入LSTM,然后就可以得到与序列等长的输出, ...
- 对线性回归,logistic回归和一般回归
对线性回归,logistic回归和一般回归 [转自]:http://www.cnblogs.com/jerrylead JerryLead 2011年2月27日 作为一个机器学习初学者,认识有限,表述 ...
- MySQL 存储过程中分页
MySQL数据库中,自定义存储过程查询表中的数据,带有分页功能.具体实例如下代码: 1 DROP PROCEDURE IF EXISTS `sampledb`.`proc_GetPagedDataSe ...
- Mac mumu模拟器设置代理
adb devices adb connect 127.0.0.1:5555 adb shell am start -a android.intent.action.MAIN -n com.andro ...
- tomcat优化,java查看
java堆空间分为 新生代 ,老年代 , 持久代 各自有各自的垃圾回收算法 eden区:新生的对象存放在这经常被回收 from .to 存活区 在老年代,回收的频率不是很高 jdk8 就没有持久 ...
- axios中文文档
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. Features 从浏览器中创建 XMLHttpRequests 从 node.js 创建 http ...
- js设置元素不能编辑
js设置元素不能编辑 $("#startLocation").attr("readOnly",true); js设置元素可以编辑 $("#startL ...