poj3067 Japan
2015-06-03 20:12
357 查看
Description
Japan plans to welcome the ACM ICPC World Finals and a lot of roads must be built for the venue. Japan is tall island with N cities on the East coast and M cities on the West coast (M <= 1000, N <= 1000). K superhighways will be build. Cities on each coast
are numbered 1, 2, ... from North to South. Each superhighway is straight line and connects city on the East coast with city of the West coast. The funding for the construction is guaranteed by ACM. A major portion of the sum is determined by the number of
crossings between superhighways. At most two superhighways cross at one location. Write a program that calculates the number of the crossings between superhighways.
Input
The input file starts with T - the number of test cases. Each test case starts with three numbers – N, M, K. Each of the next K lines contains two numbers – the numbers of cities connected by the superhighway. The first one is the number of the city on the
East coast and second one is the number of the city of the West coast.
Output
For each test case write one line on the standard output:
Test case (case number): (number of crossings)
Sample Input
Sample Output
Test case 1: 5
这题和star,cows差不多,把读入的坐标看做x,y,那么先按x进行升序排序,如果x相同的话就按照y升序排序。然后依次循环,加上比a[i].y大的线段的个数。注意用__int64
Japan plans to welcome the ACM ICPC World Finals and a lot of roads must be built for the venue. Japan is tall island with N cities on the East coast and M cities on the West coast (M <= 1000, N <= 1000). K superhighways will be build. Cities on each coast
are numbered 1, 2, ... from North to South. Each superhighway is straight line and connects city on the East coast with city of the West coast. The funding for the construction is guaranteed by ACM. A major portion of the sum is determined by the number of
crossings between superhighways. At most two superhighways cross at one location. Write a program that calculates the number of the crossings between superhighways.
Input
The input file starts with T - the number of test cases. Each test case starts with three numbers – N, M, K. Each of the next K lines contains two numbers – the numbers of cities connected by the superhighway. The first one is the number of the city on the
East coast and second one is the number of the city of the West coast.
Output
For each test case write one line on the standard output:
Test case (case number): (number of crossings)
Sample Input
1 3 4 4 1 4 2 3 3 2 3 1
Sample Output
Test case 1: 5
这题和star,cows差不多,把读入的坐标看做x,y,那么先按x进行升序排序,如果x相同的话就按照y升序排序。然后依次循环,加上比a[i].y大的线段的个数。注意用__int64
#include<iostream> #include<stdio.h> #include<string.h> #include<math.h> #include<vector> #include<map> #include<queue> #include<stack> #include<string> #include<algorithm> using namespace std; #define maxn 3005 int b[maxn]; struct node{ int x,y; }a[maxn*maxn]; bool cmp(node a,node b){ if(a.x==b.x)return a.y<b.y; return a.x<b.x; } int lowbit(int x){ return x&(-x); } void update(int pos,int num) { while(pos<=maxn){ b[pos]+=num;pos+=lowbit(pos); } } int getsum(int pos) { int num=0; while(pos>0){ num+=b[pos];pos-=lowbit(pos); } return num; } int main() { int n,m,i,j,T,k,num1=0; __int64 sum; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&m,&k); for(i=1;i<=k;i++){ scanf("%d%d",&a[i].x,&a[i].y); a[i].x++;a[i].y++; } sort(a+1,a+1+k,cmp); memset(b,0,sizeof(b)); sum=0; for(i=1;i<=k;i++){ sum+=i-1-getsum(a[i].y); update(a[i].y,1); } num1++; printf("Test case %d: %I64d\n",num1,sum); } return 0; }
相关文章推荐
- 【HDU】5253-连接的管道(并查集)
- Android底层开发(二)之HAL层 第二步
- 有三个页面,当点击其中一个另两个隐藏
- osquery An Operating System Instrumentation Framewor
- 烟大课表PC端-不仅仅是浏览器和手机APP
- 网络通信框架Volley的学习(二)
- iOS开发:获取视频特定时段的截图
- ogre渲染流程
- Python核心编程 读书笔记
- Fragment 的生命周期及使用方法详解
- hdu3530 Subsequence 单调队列
- 修改profile出错后的补救,谢天谢地export命令还能用
- 物流运交管理系统 配载发车
- Java Lambda简明教程(一)
- build.xml编译时 程序包javax.servlet不存在
- 线程弹球
- 十六进制转八进制
- 海马汽车经销商管理系统技术解析(十二)工单核准
- 12个有趣的C语言面试题
- MelFrequencyFilterBank API 及Mel频率滤波器