ZOJ 3129 Japan
题意叫你求交叉点的个数,转换一下思维,把第一个数看作是i,和它相连接的第二个数看作是ai,当i < j 且 ai > aj时这时才有交叉点,
这样就转换为求逆序对的个数;首先,把他x从小到大排序,x相同的按y从大到小排序,排完序后,在使用合并排序,计算逆序对的个数。
#include<math.h>
#include<stdio.h>
#include<limits.h>
#define MAX 1000005
int L[MAX/2],R[MAX/2];
long long sum;
typedef struct NODE{
int e;
int w;
}node;
node A[MAX];
void MERGE(int p,int q,int r)
{
int n1,n2,i,j,k;
n1=q-p+1;
n2=r-q;
for(i=0;i<n1;i++) L[i]=A[p+i].w; // 左部分
L[n1]=INT_MAX;
for(j=0;j<n2;j++) R[j]=A[q+1+j].w; // 右部分
R[n2]=INT_MAX;
i=0; j=0;
for(k=p;k<=r;k++){ // 归并,递增序列
if(L[i]<=R[j]) {
A[k].w=L[i];
i++;
}
else{
sum+=(long long)(n1-i);
A[k].w=R[j];
j++;
}
}
}
void MergeSort(int p,int r)
{
int q;
if(p<r){
q=(p+r)/2;
MergeSort(p,q);
MergeSort(q+1,r);
MERGE(p,q,r);
}
}
int cmp(const void *a,const void *b )
{
if(((node *)a)->e>((node *)b)->e) return 1;
else if((((node *)a)->e==((node *)b)->e) && (((node *)a)->w>((node *)b)->w))
return 1;
return -1;
}
int main()
{
int i,k,j,m,n,t;
scanf("%d",&t);
for(j=1;j<=t;j++){
sum=0;
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<k;i++)
scanf("%d%d",&A[i].e,&A[i].w);
qsort(A,k,sizeof(node),cmp);
MergeSort(0,k-1);
printf("Test case %d: %lld\n",j,sum);
}
system("pause");
return 0;
}
ZOJ 3129 Japan相关推荐
- ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!
两题水题: 1.如果一个数能被分解为两个素数的乘积,则称为Semi-Prime,给你一个数,让你判断是不是Semi-Prime数. 2.定义F(0) = 7, F(1) = 11, F(n) = F( ...
- zoj 1204 Additive equations
ACCEPT acm作业 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=204 因为老师是在集合那里要我们做这道题.所以我很是天 ...
- 【HDU/POJ/ZOJ】Calling Extraterrestrial Intelligence Again (素数打表模板)
http://poj.org/problem?id=1411 POJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=168 ...
- 参加LinuxCon Japan 2012
好长时间没有写博客了.一是时间紧张,另外是这段时间来没有什么可记录的,也发现越来越没有什么文笔可言了,越来越趋于流水账形式了. 发现上小学的时候一写流水账就会被老师批评,说这孩子作文写的跟记流水账似的 ...
- 模拟 ZOJ 3878 Convert QWERTY to Dvorak
题目传送门 1 /* 2 模拟:手敲map一一映射,累! 3 除了忘记读入字符串不能用gets用getline外还是很顺利的AC了:) 4 */ 5 #include <cstdio> 6 ...
- 矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence
题目传送门 1 /* 2 题意:加上适当的括号,改变计算顺序使得总的计算次数最少 3 矩阵连乘积问题,DP解决:状态转移方程: 4 dp[i][j] = min (dp[i][k] + dp[k+1] ...
- ZOJ 3597 Hit the Target! (线段树扫描线 -- 矩形所能覆盖的最多的点数)
ZOJ 3597 题意是说有n把枪,有m个靶子,每把枪只有一发子弹(也就是说一把枪最多只能打一个靶子), 告诉你第 i 把枪可以打到第j个靶, 现在等概率的出现一个连续的P把枪,在知道这P把枪之后,你 ...
- ZOJ 1696 Viva Confetti 计算几何
计算几何:按顺序给n个圆覆盖.问最后能够有几个圆被看见.. . 对每一个圆求和其它圆的交点,每两个交点之间就是可能被看到的圆弧,取圆弧的中点,往外扩展一点或者往里缩一点,从上往下推断有没有圆能够盖住这 ...
- 九度OJ—题目1032:ZOJ
题目描写叙述: 读入一个字符串.字符串中包括ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出.当某个字符用完时,剩下的仍然依照ZOJ的顺序输出. 输入: 题目包括多组用例,每组用例占一行,包括ZOJ ...
最新文章
- 【错误归纳】selenium.common.exceptions.WebDriverException: Message: unknown error
- 创建二级索引_技术分享 | InnoDB 排序索引的构建
- c语言中怎么 写子程序,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...
- NoSQL架构实践(三)——以NoSQL为缓存
- cordova 支付_Cordova打包教程(H5项目打包成ipa)
- Bootstrap3 工具提示插件的事件
- 文档丨Oracle 20c 概念手册
- Core Animation 文档翻译 (第六篇)—高级动画技巧
- java局部变量的描述正确的是_【Java入门课|这才是Java局部变量的正确使用方法,你真的会用这些吗】- 环球网校...
- 解决Cannot dlopen some GPU libraries.问题
- kali Linux 系统安装教程
- 苹果账号被盗用户:支付宝、微信被盗刷追偿难
- Uniapp开发仿哔哩哔哩/短视频系统APP源码
- c语言字母概率,C/C++知识点之智邮普创c语言面试题 ---- 字母概率
- 购买您的工作从家庭企业经营使用这些技巧
- chmod不是内部或外部命令
- GPS导航(一):分类和原理
- 论文、软件工程常用图表
- harbor企业级镜像仓库搭建
- 互联网医疗大数据类型的深度分析