【JZOJ4894】【NOIP2016提高A组集训第16场11.15】SJR的直线
题目描述
数据范围
解法
考虑逐次加入每一条直线。
对于当前已加入的直线集合L,现在要新加入一条直线l。
那么它产生的贡献,与平行线有关。
对于任意三条直线,如果其中任意两条平行,那么将不做贡献。
所以给原直线的斜率排序,然后O(n)逐次加入,就能快速求答案了。
代码
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#define ll long long
#define sqr(x) ((x)*(x))
using namespace std;
const char* fin="trokuti.in";
const char* fout="trokuti.out";
const int inf=0x7fffffff;
const int maxn=400007,mo=1000000007;
int n,i,j,k;
ll ans;
struct line{
ll x,y,z;
bool friend operator ==(const line &a,const line &b){
return (ll)a.x*b.y==(ll)a.y*b.x;
}
}a[maxn];
bool cmp(const line &a,const line &b){
/*int k=1;
if (b.y<0) k*=-1;
if (a.y<0) k*=-1;
return (ll)a.x*abs(b.y)*k<(ll)b.x*abs(a.y);*/
if (a.y==0 && b.y==0) return false;
else if (a.y==0) return false;
else if (b.y==0) return true;
return a.x*1.0/a.y<b.x*1.0/b.y;
}
void qsort(int l,int r){
int i=l,j=r;
line mid=a[(l+r)/2];
while (i<=j){
while (cmp(a[i],mid)) i++;
while (cmp(mid,a[j])) j--;
if (i<=j){
swap(a[i],a[j]);
i++;
j--;
}
}
if (i<r) qsort(i,r);
if (l<j) qsort(l,j);
}
ll count(int x){
return (ll)x*(x-1)/2;
}
int main(){
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++){
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
//a[i].x+=1000000000;
//a[i].y+=1000000000;
}
//sort(a+1,a+n+1,cmp);
//for (i=1;i<=n;i++) for (j=i+1;j<=n;j++) if (!cmp(a[i],a[j])) swap(a[i],a[j]);
qsort(1,n);
j=0;
k=0;
for (i=1;i<=n;i++){
if (i>1 && a[i]==a[i-1]) j++;
else k+=(count(j+1))%mo,j=0;
ans=(ans+count(i-1-j)-k)%mo;
}
cout<<ans<<endl;
return 0;
}
启发
垃圾STL,不判断边界条件,不得不手打QSORT。
【JZOJ4894】【NOIP2016提高A组集训第16场11.15】SJR的直线的更多相关文章
- JZOJ 【NOIP2016提高A组集训第16场11.15】兔子
JZOJ [NOIP2016提高A组集训第16场11.15]兔子 题目 Description 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3 ...
- JZOJ 【NOIP2016提高A组集训第16场11.15】SJR的直线
JZOJ [NOIP2016提高A组集训第16场11.15]SJR的直线 题目 Description Input Output Sample Input 6 0 1 0 -5 3 0 -5 -2 2 ...
- 【JZOJ4895】【NOIP2016提高A组集训第16场11.15】三部曲
=v= 因为外来的入侵,国王决定在某些城市加派士兵.所有城市初始士兵数量为0.当城市 被加派了k名士兵时.城市i的所有子城市需要被加派k+1名士兵.这些子城市的所有子城市需要被加派k+2名士兵.以此类 ...
- 【JZOJ4896】【NOIP2016提高A组集训第16场11.15】兔子
题目描述 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连.换句话讲,这些兔子窝之 ...
- 【JZOJ4898】【NOIP2016提高A组集训第17场11.16】人生的价值
题目描述 NiroBC终于找到了人生的意义,可是她已经老了,在新世界,没有人认识她,她孤独地在病榻上回顾着自己平凡的一生,老泪纵横.NiroBC多么渴望再多活一会儿啊! 突然一个戴着黑色方框眼镜,方脸 ...
- 【JZOJ4899】【NOIP2016提高A组集训第17场11.16】雪之国度
题目描述 雪之国度有N座城市,依次编号为1到N,又有M条道路连接了其中的城市,每一条道路都连接了不同的2个城市,任何两座不同的城市之间可能不止一条道路.雪之女王赋予了每一座城市不同的能量,其中第i座城 ...
- 【JZOJ4841】【NOIP2016提高A组集训第4场11.1】平衡的子集
题目描述 夏令营有N个人,每个人的力气为M(i).请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? 数据范围 40%的数据满足: ...
- 【NOIP2016提高A组集训第4场11.1】平衡的子集
题目 夏令营有N个人,每个人的力气为M(i).请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? 分析 如果暴力枚举每个人被分到哪 ...
- 【NOIP2016提高A组集训第14场11.12】随机游走
题目 YJC最近在学习图的有关知识.今天,他遇到了这么一个概念:随机游走.随机游走指每次从相邻的点中随机选一个走过去,重复这样的过程若干次.YJC很聪明,他很快就学会了怎么跑随机游走.为了检验自己是不 ...
随机推荐
- jQuery4操作表单+属性+样式
一.动态添加表格 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 微信小程序上传报错:以下文件没有被打包上传: · .gitignore
简单粗暴的办法就是:找到gitignore文件,把该文件删除掉即可. 在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这 ...
- windows下 将tomcat做成服务,并于oracle后启动
一.将tomcat做成服务 1.下载解压版的tomcat 6.*, 设置java.tomcat的环境(这个就不说了). 2.运行->cmd->到tomcat安装目录的bin目录: 3.运行 ...
- JDK中有关23个经典设计模式的示例
Creational patterns Abstract factory (recognizeable by creational methods returning an abstract/inte ...
- Delphi 设计模式:《HeadFirst设计模式》---行为模式之责任链模式
模式解说 责任链模式是一种对象的行为模式,它将处理客户端请求的那些对象联成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. 通常使用在以下场合 1 有多个对象可以处理一个请求,哪个对象处理该请 ...
- Cesium官方教程4--影像图层
原文地址:https://cesiumjs.org/tutorials/Imagery-Layers-Tutorial/ 影像图层 Cesium支持多种服务来源的高精度影像(地图)数据的加载和渲染.图 ...
- 《数据结构与算法分析——C语言描述》ADT实现(NO.01) : 栈(Stack)
这次的数据结构是一种特殊的线性表:栈(Stack) 栈的特点是后入先出(LIFO),可见的只有栈顶的一个元素. 栈在程序中的地位非常重要,其中最重要的应用就是函数的调用.每次函数调用时都会创建该函数的 ...
- hive作业的优化策略
Mapreduce自身的特点: 1.IO和网络负载大:优化策略:减少IO和网络负载. 2.内存负载不大.优化策略:增大内存使用率: 3.CPU负载不大.优化策略:增大CPU使用率: (hive的优化应 ...
- LUOGU P1290 欧几里德的游戏
题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的数的正整数倍,当然,得到的数 ...
- MySQL:比较两个数据表不同部分
简单比较 1.SELECT * FROM t2 WHERE id NOT IN (SELECT id FROM t1); 2.SELECT * FROM t2 WHERE NOT EXISTS(SEL ...