Japan

原创 2016年08月30日 13:24:27
链接:http://poj.org/problem?id=3067

题目: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.

题意:给两列数字,均为从上到下为1到n,再给它们之间的连线,求交点一共多少个(两两相交算一个)

分析:这道题利用的是计算的规律,题目里说到所给的数据是从小到大给的,但是我还是排了一下序,左列优先,右列次之,之后从最小的开始把右列的值放入树状数组,因为左列优先,所以之后的点对,只有在树状数组里存在别右列的值小的点才会有焦点,而且有几个就有几个焦点。

题解:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <string>
#include <cstring>
#include <functional>
#include <cmath>
#include <cctype>
#include <cfloat>
#include <climits>
#include <complex>
#include <deque>
#include <list>
#include <set>
#include <utility>
using namespace std;

__int64 ans;
int num[1000010];
int bit[1000010];
pair<int,int> ps[1000010];
int N,M,K;

void add(int x)
{
	while(x<=1000001){
		bit[x]+=1;
		x+=x&-x;
	}
}

__int64 countn(int x)
{
	__int64 an=0;
	while(x){
		an+=bit[x];
		x-=x&-x;
	}
	return an;
}

bool cmp(pair<int,int> a,pair<int,int> b)
{
	if(a.first==b.first) return a.second<b.second;
	else return a.first<b.first;
}

int main()
{
	//freopen("in.txt","r",stdin);
	int n;
	scanf("%d",&n);
	for(int T=1;T<=n;T++)
	{
		memset(bit,0,sizeof bit);
		ans=0;
		scanf("%d %d %d",&N,&M,&K);
		for(int i=1;i<=K;i++){
			scanf("%d %d",&ps[i].first,&ps[i].second);
		}
		sort(ps+1,ps+K+1,cmp);
		for(int i=1;i<=K;i++){
			ans+=countn(1000001)-countn(ps[i].second);
			add(ps[i].second);
		}
		printf("Test case %d: %lld\n",T,ans);
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

SHOULD OUR CHINESE BOYCOTT JAPANESE GOODS?

  Our viwepoint is that we should not boycott japanese goods.How to develop the ralation between Chi...
  • fei6006
  • fei6006
  • 2005年11月27日 16:22
  • 2550

fuck japan

  • yjz0065
  • yjz0065
  • 2006年01月08日 21:57
  • 1479

Tunnel Warfare(STL简单使用)

Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
  • qq_35104140
  • qq_35104140
  • 2017年08月24日 17:10
  • 75

HDU1540 Tunnel Warfare

Problem Description During the War of Resistance Against Japan, tunnel warfare was carried out ex...
  • mowayao
  • mowayao
  • 2014年05月06日 13:08
  • 583

【POJ3067】Japan-区间求和

【POJ3067】Japan-区间求和
  • Maxwei_wzj
  • Maxwei_wzj
  • 2016年07月26日 20:09
  • 164

hdu1540Tunnel Warfare (线段树,单点更新)

Problem Description During the War of Resistance Against Japan, tunnel warfare was carried out exte...
  • u010372095
  • u010372095
  • 2013年11月02日 17:11
  • 1016

去掉Googl默认界面的logo下面的尴尬的文字,对面的菇凉请看过来!!!

去除Google图标下的文字、任意设置自己喜欢的(指定)地区的搜索引擎(例如Google)...
  • qq_24452475
  • qq_24452475
  • 2016年03月15日 16:50
  • 471

poj3067 Japan(树状数组)

树状数组
  • u012860063
  • u012860063
  • 2014年06月29日 10:53
  • 1222

日本电子政府e-gov,e-japan战略分析

与e-gov相比较来说,可能e-japan更为大家所熟知。其实我本不想就两个词汇有何区别,如何定义,不同在哪里诸多问题进行阐述,仅仅是想针对日本电子政府这一名词进行阐述,关于是究竟称之为e-japan...
  • thefirstwind
  • thefirstwind
  • 2006年07月30日 20:24
  • 2382

japan

お前には関係ない。おまえにはかんけいない。跟你没关系。
  • linuxtoproot
  • linuxtoproot
  • 2008年10月14日 02:20
  • 186
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Japan
举报原因:
原因补充:

(最多只允许输入30个字)