ZOJ 3041 City Selection(好排序)

题目链接:ZOJ 3041 City Selection

题意:有N个城市坐标和M个工厂坐标,在以工厂为原点的第四象限的点都会受到污染。即图中画线区域

思路:把工厂和城市的坐标一起排序,再比较y坐标。

AC代码:

#include <stdio.h>
#include <algorithm>
#include <set>
using namespace std;
const int maxn=200010;

struct node{
	int x,y;
	int flag;
};
struct node p[maxn*2],tmp,ans[maxn];

bool cmp1(node a,node b){
	if(a.x!=b.x)
		return a.x<b.x;
	if(a.y!=b.y)
		return a.y>b.y;
	return a.flag<b.flag;
}

bool cmp2(node a,node b){
	if(a.x!=b.x)
		return a.x<b.x;
	if(a.y!=b.y)
		return a.y<b.y;
}

int main()
{
	int n,m,i,j,count;
	while(scanf("%d%d",&n,&m)!=EOF){
		int cnt=0;
		for(i=0;i<n;i++){
			scanf("%d%d",&tmp.x,&tmp.y);
			tmp.flag=1;
			p[cnt++]=tmp;
		}
		for(i=0;i<m;i++){
			scanf("%d%d",&tmp.x,&tmp.y);
			tmp.flag=0;
			p[cnt++]=tmp;
		}
		sort(p,p+cnt,cmp1);
		tmp.x=-1000000010;
		tmp.y=-1000000010;
		count=0;
		for(i=0;i<cnt;i++){
			if(p[i].flag==0 && p[i].y>=tmp.y)
				tmp.y=p[i].y;
			if(p[i].flag==1 && p[i].y>tmp.y)
				ans[count++]=p[i];
		}
		sort(ans,ans+count,cmp2);
		printf("%d\n",count);
		for(i=0;i<count;i++){
			printf("%d %d\n",ans[i].x,ans[i].y);
		}
	}
	return 0;
}
/*
7 3
-3 3
0 1
-2 2
1 3
4 2
3 4
5 5

-2 2
2 0
4 4

5 3
0 1
-2 2
1 4
1 3
4 4

-2 2
2 0
4 3

1 1
0 0
-1 0
*/
时间: 2024-10-18 22:41:01

ZOJ 3041 City Selection(好排序)的相关文章

zoj 3041 City Selection(数学啊)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=2039 The government decided to build some cities in a newly developping area. Now they had N different locations to select from, while there were M factories in this newly developping ar

ZOJ 3042 City Selection II 【序】【离散化】【数学】

题意: 输入数据n,m.n代表工厂的数量,m代表城市的数量. 接下来n+m行为工厂和城市的坐标. 规定如图所示方向刮风,工厂的air会污染风向地区的air. 注意,工厂和城市的坐标表示的是从x到x+1从y到y+1之间小正方形都是工厂区域,规定如果只有一个coner的air被污染那么该地区视为无污染. 要求输出有多少不被污染的城市. 坑: 思考了很多问题.... 1.加入某城市的正下方是工厂怎么办...这个是否算污染. 2.假如有两个角被污染了怎么办...算污染吗. 坑了一整天.没办法找大神的代码

POJ 1128 &amp; ZOJ 1083 Frame Stacking (拓扑排序)

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=83 http://poj.org/problem?id=1128 Frame Stacking Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4102   Accepted: 1378 Description Consider the following 5 picture frames placed

ZOJ 3956 Course Selection System 背包DP

ZOJ3956 观察数据范围, c的值非常小 只有100 所以c的和也很有限 只有50000 是否可以从这里下手? 对于某一个c的和 我们一定希望h的和最大 才有可能是最终答案. 于是有了类似背包的dp方程. 代码很简单,就不给出方程了. //比赛的时候想得太多,都想到斜率优化上了,完全忽略了c的范围这么小!!!毕竟图样. //一个人的面命运,当然要靠自我奋斗,但是也要考虑到历史的行程. #include<iostream> #include<cstdio> #include<

zoj 2180 - City Game

题目:给你一个1000*1000的01矩阵,求里面全是1的最大矩形面积. 分析:dp,单调队列.zju1985升级版 ^_^ 继上次那道题想了一天. 本来想用O(N^2)的最大正方形求解,想错了今天仔细一看,其实这道题目就是二维的最大矩形: 我们将问题分解成最大矩形,即求解以k行为底边的图形中的最大矩形,然后合并,求最大的矩形: 预处理: 求出以每行为底边的每一列从底边开始向上的最大连续1的高度MaxH. O(N^2) : DP:对于每一层底边,我们利用单调队列求解出本行的最大矩形. O(N):

使用JAVA进行排序

利用JAVA完成排序 当我们在进行数据库进行查询的时候,当需要按某个字段来进行排序的时候,可以使用SQL语句来完成排序,可以升序,也可以降序.JAVA中的Collections类也可以完成这种操作,SQL的用法和这种集合工具类的操作,可以用于不同的情况中,至于怎么用,可以根据业务场景来选择,下面我罗列出具体的代码,大家可以参考. 1)创建工程名为sort的JAVA工程 创建包结构: 创建User类: 1 package com.sunyard.bean; 2 3 /** 4 * <p> 5 *

排序专题一

1.选择排序 import java.util.Scanner ; public class Selection{ //选择排序 public static void selectionSort(Comparable[] a){ int n = a.length ; for (int i=0;i<n-1;i++) { int min = i ; for (int j=i+1;j<n;j++) { if (less(a[j],a[min])) { min = j ; } } exch(a,i,m

UVA 124 &amp; POJ 1270 Following Orders(拓扑排序)

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=60 http://poj.org/problem?id=1270 Following Orders Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3806   Accepted: 1507 Description Or

C# 数据结构--排序[上]

概述 看了几天的排序内容,现在和大家分享一些常见的排序方法. 啥是排序? 个人理解的排序:通过对数组中的值进行对比,交换位置最终得到一个有序的数组.排序分为内存排序和外部排序.本次分享排序方法都为内存排序. 啥是排序的稳定性? 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的:否则称为不稳定的.  常见排序: 冒泡排序,选择排序,直接插入排序