题目描述

数据范围

解法

考虑逐次加入每一条直线。

对于当前已加入的直线集合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的直线的更多相关文章

  1. JZOJ 【NOIP2016提高A组集训第16场11.15】兔子

    JZOJ [NOIP2016提高A组集训第16场11.15]兔子 题目 Description 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3 ...

  2. 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 ...

  3. 【JZOJ4895】【NOIP2016提高A组集训第16场11.15】三部曲

    =v= 因为外来的入侵,国王决定在某些城市加派士兵.所有城市初始士兵数量为0.当城市 被加派了k名士兵时.城市i的所有子城市需要被加派k+1名士兵.这些子城市的所有子城市需要被加派k+2名士兵.以此类 ...

  4. 【JZOJ4896】【NOIP2016提高A组集训第16场11.15】兔子

    题目描述 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连.换句话讲,这些兔子窝之 ...

  5. 【JZOJ4898】【NOIP2016提高A组集训第17场11.16】人生的价值

    题目描述 NiroBC终于找到了人生的意义,可是她已经老了,在新世界,没有人认识她,她孤独地在病榻上回顾着自己平凡的一生,老泪纵横.NiroBC多么渴望再多活一会儿啊! 突然一个戴着黑色方框眼镜,方脸 ...

  6. 【JZOJ4899】【NOIP2016提高A组集训第17场11.16】雪之国度

    题目描述 雪之国度有N座城市,依次编号为1到N,又有M条道路连接了其中的城市,每一条道路都连接了不同的2个城市,任何两座不同的城市之间可能不止一条道路.雪之女王赋予了每一座城市不同的能量,其中第i座城 ...

  7. 【JZOJ4841】【NOIP2016提高A组集训第4场11.1】平衡的子集

    题目描述 夏令营有N个人,每个人的力气为M(i).请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? 数据范围 40%的数据满足: ...

  8. 【NOIP2016提高A组集训第4场11.1】平衡的子集

    题目 夏令营有N个人,每个人的力气为M(i).请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? 分析 如果暴力枚举每个人被分到哪 ...

  9. 【NOIP2016提高A组集训第14场11.12】随机游走

    题目 YJC最近在学习图的有关知识.今天,他遇到了这么一个概念:随机游走.随机游走指每次从相邻的点中随机选一个走过去,重复这样的过程若干次.YJC很聪明,他很快就学会了怎么跑随机游走.为了检验自己是不 ...

随机推荐

  1. 组件:参数验证props:组件参数验证语法

    <!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...

  2. JasperReports报表区段14

    我们将在本章开始,一个简单的报表模板的结构看.依样画葫芦JasperReports的结构报表模板归类到多个区段.部分是有规定的高度,并且可以包含像直线,矩形,图像或文本字段对象报表的部分. 通过提供的 ...

  3. Luogu P1312 Mayan游戏(搜索)

    P1312 Mayan游戏 题意 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个\(7\)行\(\times 5\)列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必 ...

  4. 20190716-T3-奇袭

    我要嗝了 我经过一系列努力,寻找了一系列,各种复杂度的方法. 1>纯暴力 复杂度:$\Theta(N^5)$ 不多解释,上代码: 空间复杂度无法承受,如果考试偏要写这个不妨动态开数组: 例: # ...

  5. spring四种依赖注入方式(转)

    spring四种依赖注入方式!! 平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提 ...

  6. jnhs[未解决]无法使用选定的hibernate配置文件建立数据库连接.请验证hibernate.cfg.xml中的数据库连接详情信息

    工程可以正常的使用读写数据库,当然model和model.hbm.xml文件是自己写的. 解决中

  7. os模块和sys模块

    1.os模块与path有关:os.path.isfile():判断置顶对象是否为文件,是返回True,否返回Falseos.path.isdir():判断指定对象是否为目录,是返回True,否返回Fa ...

  8. List的深度序列化Demo

    今天项目中出现了这个问题...就是使用一个List去进行其他的操作,生成一个新的List.但是却将原来的List的值也给改了...这应该是引用传递的问题,查了资料发现这是浅拷贝造成的.(ps:使用ad ...

  9. 用 Python 写一个 NoSQL 数据库Python

    NoSQL 这个词在近些年正变得随处可见. 但是到底 “NoSQL” 指的是什么? 它是如何并且为什么这么有用? 在本文, 我们将会通过纯 Python (我比较喜欢叫它, “轻结构化的伪代码”) 写 ...

  10. 对于MD5加密处理方式

    来源:http://blog.51cto.com/xqtesting/1924977 但有时候我们请求的参数可能需要加密,比如登录接口中的密码可能需要经过md5加密这时候怎么处理呢? 这种方法比较简单 ...