cdoj1341卿学姐与城堡的墙
地址:http://acm.uestc.edu.cn/#/problem/show/1341
题目:
卿学姐与城堡的墙
Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
卿学姐终于来到了魔王的城堡,城堡修建的十分壮观。
即使心中放不下公主,卿学姐还是忍不住驻足观赏这宏伟的建筑。
卿学姐注意到城堡的墙上有若干直线状的花纹。
可以将墙看做一个平面,卿学姐想知道有多少种方式任取两个直线,使得这两个直线的交点的横坐标xx满足:u≤x≤vu≤x≤v。
Input
第一行三个整数N,u,vN,u,v,标明直线有NN条。
接下来有NN行,每行两个整数k,bk,b,表示这条直线是y=kx+by=kx+b
1≤N≤2000001≤N≤200000
0≤|k|≤10000000000≤|k|≤1000000000
0≤|b|≤10000000000≤|b|≤1000000000
0≤|u|≤10000000000≤|u|≤1000000000
0≤|v|≤10000000000≤|v|≤1000000000
输入保证u≤vu≤v,保证没有两条直线是一样的
Output
输出一个整数,代表选择的方法数。
Sample input and output
| Sample Input | Sample Output |
|---|---|
3 -3 1 |
3 |
Hint

上图是样例的解释,交点是A,B,C
思路:
对所有直线进行预处理(只保存和uv的交点)这是很容易想到的,不过一开始不知道有种东西叫逆序对,只想到n*n的算法。。。。。。。
逆序对的求法有好几种我用的是归并的方法。。
不过这个题要考虑边界情况,如果按u边界的y排序的话,就需要对u边界上的点特殊处理,其实就是u边界上的点扫一遍就好了,,,
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <queue>
#include <stack>
#include <map>
#include <vector>
#include <cstdlib>
#include <string> #define PI acos((double)-1)
#define E exp(double(1))
using namespace std; vector<pair<long long ,long long > >p;
long long a[+];
long long temp[+];
long long cnt=;//逆序对的个数
double cnm_lg(int n,int m)
{
int i;
double s1=0.0,s2=0.0;
for(i=;i<=m;i++)
s1 += log(i);
for(i=n-m+;i<=n;i++)
s2 += log(i);
return s2-s1;
}
long long cnm_double(int n,int m)
{
if(n<m)
return ;
if(m > n/)
m = n-m;
return (long long)exp(cnm_lg(n,m));
}
void merge(int left,int mid,int right)
{
int i=left,j=mid+,k=;
while (( i<=mid )&& (j<=right))
if (a[i]<a[j]) temp[k++]=a[i++];
else {
cnt+=mid+-i;//关键步骤
temp[k++]=a[j++];
}
while (i<=mid) temp[k++]=a[i++];
while (j<=right) temp[k++]=a[j++];
for (i=,k=left; k<=right;) a[k++]=temp[i++];
}
void mergeSort(int left,int right)
{
if (left<right)
{ int mid=(left+right)/;
mergeSort(left, mid);
mergeSort(mid+, right);
merge(left, mid, right);
}
}
int main (void)
{
int n,u,v;
cin>>n>>u>>v;
for(int i=;i<n;i++)
{
long long k,b;
scanf("%lld%lld",&k,&b);
p.push_back(make_pair(b+u*k,b+v*k));
}
sort(p.begin(),p.end());
p.push_back(make_pair(,));
pair<long ,long >temp=p[];
temp.second=;
for(int i=;i<=n;i++)
if(temp.first != p[i].first || i==n)
{
cnt+=cnm_double(i-temp.second,);
temp.first=p[i].first;temp.second=i;
}
if(u==v)
{
cout<<cnt<<endl;return ;
}
for(int i=;i<n;i++)
a[i]=p[i].second;
mergeSort(,n-);
cout<<cnt<<endl;
return ;
}
cdoj1341卿学姐与城堡的墙的更多相关文章
- E - 卿学姐与城堡的墙(树状数组求逆序数)
卿学姐与城堡的墙 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- cdoj 1324 卿学姐与公主 线段树裸题
卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- UESTC - 1324 卿学姐与公主
题目链接 某日,百无聊赖的卿学姐打开了某11区的某魔幻游戏 在这个魔幻的游戏里,生活着一个美丽的公主,但现在公主被关押在了魔王的城堡中. 英勇的卿学姐拔出利刃冲向了拯救公主的道路. 走过了荒野,翻越了 ...
- cdoj1324卿学姐与公主
地址:http://acm.uestc.edu.cn/#/problem/show/1324 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memo ...
- CDOJ 1324 卿学姐与公主(分块)
CDOJ 1324 卿学姐与公主(分块) 传送门: UESTC Online Judgehttp://acm.uestc.edu.cn/#/problem/show/1324 某日,百无聊赖的卿学姐打 ...
- A - 卿学姐与公主(线段树+单点更新+区间极值)
A - 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- cdoj 1328 卿学姐与诡异村庄 Label:并查集 || 二分图染色
卿学姐与诡异村庄 Time Limit: 4500/1500MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- cdoj 1329 卿学姐与魔法 优先队列
卿学姐与魔法 Time Limit: 1200/800MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...
- 卿学姐与公主 UESTC - 1324 分块模板题
题意:http://acm.uestc.edu.cn/#/problem/show/1324 中文题,自己看喽. 题解:分块模板,update时顺便更新块属性.ask时先判掉belong[l]==be ...
随机推荐
- ArrayList和Vector的区别?
ArrayList和Vector的区别? 解答:同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的:数据增长:当需要增长时,Vector默认增长为原来一 ...
- 【vijos】1892 树上的最大匹配(树形dp+计数)
https://vijos.org/p/1892 这个必须得卡评测机+手动开栈才能卡过QAQ 手动开栈我百度的... int size=256<<20; //256MB char *p=( ...
- API 接口设计中 Token 类型的分类与设计
在实际的网站设计中我们经常会遇到用户数据的验证和加密的问题,如果实现单点,如果保证数据准确,如何放着重放,如何防止CSRF等等 其中,在所有的服务设计中,都不可避免的涉及到Token的设计. 目前,基 ...
- spark(1.1) mllib 源码分析(三)-朴素贝叶斯
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4042467.html 本文主要以mllib 1.1版本为基础,分析朴素贝叶斯的基本原理与源码 一.基本原 ...
- 上传文件ie7
https://www.cnblogs.com/front-end-develop/p/6214818.html 第一步:html中引入jQuery-1.7.1.js和ajaxFileUpload.j ...
- c#的小技巧
很多.net的使用小技巧,总是要自己记下来的,给自己. 一:时间格式话中H和h的区别 DateTime.ToString("yyyy-MM-dd HH:mm:ss");//转化成2 ...
- Powershell About Active Directory Group Membership of a domain user
使用Get-User命令去寻找group membership of a domain user $((Get-ADUser Wendy -Properties *).MemberOf -split ...
- curl post CURLOPT_POSTFIELDS
PHP: curl_setopt - Manual http://php.net/manual/en/function.curl-setopt.php CURLOPT_POST TRUE to do ...
- pre 布局
w
- 将Android studio的工程导入到eclipse中
自从Android Studio(后面称AS)推出后,越来越多的项目都使用AS开发. AS往eclipse迁移的方法: 其实很简单,代码都是一样的,从AS工程中找到与Eclipse工程对应的文件,放到 ...