题意:

输入数据n,m。n代表工厂的数量,m代表城市的数量。

接下来n+m行为工厂和城市的坐标。

规定如图所示方向刮风,工厂的air会污染风向地区的air。

注意,工厂和城市的坐标表示的是从x到x+1从y到y+1之间小正方形都是工厂区域,规定如果只有一个coner的air被污染那么该地区视为无污染。

要求输出有多少不被污染的城市。

坑:

思考了很多问题....

1.加入某城市的正下方是工厂怎么办...这个是否算污染。

2.假如有两个角被污染了怎么办...算污染吗。

坑了一整天.没办法找大神的代码测试了几组样例...【奈何年代久远代码都不好找更不用说题解】

总之测试结果是以上两种都不算污染。

其实坑都是自己挖的,用正常的脑子思考下问题,就不会出问题。

不过话说回来掉坑里不可怕,要保持冷静爬出来...

思路:

1.离散化,已知直线坐标,按照截距离散化。

2.序,从坐到右从上刀下依次处理,遇到工厂更新标记数组,遇到城市检查是否被污染,无污染加入答案序列。

3.如何处理只有两个顶点被污染的问题,这点我借鉴了大牛的思路,每个点不处理右上角的点,不管是工厂还是城市。那么城市不污染的条件是除了右上角的点以外其它三个点不被污染。证明自己画个图想想。

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int inf=0x3f3f3f3f;
int tmp;
struct st{
pair<int,int>me;
bool imfac;
};
pair<int,int>city[];
pair<int,int>fac[];
int jilu[];
int mynum[];
bool vis[];
st all[];
pair<int,int>aaa[];
bool cmp(st a,st b){
if(a.me.first!=b.me.first)
return a.me.first<b.me.first;
else if(a.me.second!=b.me.second)return a.me.second>b.me.second;
else return a.imfac>b.imfac;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
memset(vis,,sizeof(vis));
int num=,nnnn=;
for(int i=;i<n;i++){
scanf("%d%d",&fac[i].first,&fac[i].second);
jilu[num++]=*fac[i].first+fac[i].second;
jilu[num++]=*(fac[i].first+)+fac[i].second;
jilu[num++]=*(fac[i].first)+fac[i].second+;
}
for(int i=;i<m;i++){
scanf("%d%d",&city[i].first,&city[i].second);
jilu[num++]=*city[i].first+city[i].second;
jilu[num++]=*city[i].first+city[i].second+;
jilu[num++]=*(city[i].first+)+city[i].second;
}
sort(jilu,jilu+num);
num=unique(jilu,jilu+num)-jilu;
for(int i=;i<n;i++){
all[nnnn++].me=fac[i];
all[nnnn-].imfac=;
}
for(int i=;i<m;i++){
all[nnnn++].me=city[i];
all[nnnn-].imfac=;
}
int id,ansnum=;
sort(all,all+nnnn,cmp);
for(int i=;i<nnnn;i++){
if(all[i].imfac){
id=upper_bound(jilu,jilu+num,*all[i].me.first+all[i].me.second)-jilu;
vis[id]=;
id=upper_bound(jilu,jilu+num,*all[i].me.first+all[i].me.second+)-jilu;
vis[id]=;
id=upper_bound(jilu,jilu+num,*(all[i].me.first+)+all[i].me.second)-jilu;
vis[id]=;
}
else{
int ttt=;
id=upper_bound(jilu,jilu+num,*(all[i].me.first)+all[i].me.second)-jilu;
ttt+=vis[id];
id=upper_bound(jilu,jilu+num,*(all[i].me.first)+all[i].me.second+)-jilu;
ttt+=vis[id];
id=upper_bound(jilu,jilu+num,*(all[i].me.first+)+all[i].me.second)-jilu;
ttt+=vis[id];
if(ttt==){
aaa[ansnum++]=all[i].me;
}
}
}
sort(aaa,aaa+ansnum);
printf("%d\n",ansnum);
for(int i=;i<ansnum;i++){
printf("(%d,%d)\n",aaa[i].first,aaa[i].second);
}
}
}

ZOJ 3042 City Selection II 【序】【离散化】【数学】的更多相关文章

  1. Selection II

    [Selection II] 1.上.下.左.右键可以移动Selection 1个像素.按住Shift键,可以一次移动10个像素. 2.Add Selection模式的快捷键是Shift,Sub Se ...

  2. HDU 4358 莫队算法+dfs序+离散化

    Boring counting Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 98304/98304 K (Java/Others)T ...

  3. zoj 3620 Escape Time II dfs

    题目链接: 题目 Escape Time II Time Limit: 20 Sec Memory Limit: 256 MB 问题描述 There is a fire in LTR ' s home ...

  4. 【BZOJ1645】[Usaco2007 Open]City Horizon 城市地平线 离散化+线段树

    [BZOJ1645][Usaco2007 Open]City Horizon 城市地平线 Description Farmer John has taken his cows on a trip to ...

  5. ZOJ 3332 Strange Country II

    Strange Country II Time Limit: 1 Second      Memory Limit: 32768 KB      Special Judge You want to v ...

  6. ZOJ 3956 Course Selection System

    题意 有n节课可供选择,每节课都有两个值Hi和Ci,如果学生选择了m节课(x1,x2,....,xm),则它的舒适值被定义为: //这里没有公式((lll¬ω¬)),因为那个图片我保存不下来≧ ﹏ ≦ ...

  7. zoj 3356 Football Gambling II【枚举+精度问题】

    题目: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3356 http://acm.hust.edu.cn/vjudge/ ...

  8. ZOJ 2301/HDU 1199 线段树+离散化

    给这个题目跪了两天了,想吐简直 发现自己离散化没学好 包括前一个离散化的题目,实际上是错了,我看了sha崽的博客后才知道,POJ那题简直数据弱爆了,本来随便一组就能让我WA掉的,原因在于离散化的时候, ...

  9. HDU 4358 Boring counting(莫队+DFS序+离散化)

    Boring counting Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 98304/98304 K (Java/Others) ...

随机推荐

  1. Dom之标签增删操作

    dom操作:THML新增子标签 a标签(appendChild) <!DOCTYPE html><html lang="en"><head> & ...

  2. Android软键盘遮挡的四种解决方案

    问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入 ...

  3. selenium+python自动化之登录案例

    一.登录 1.先打开浏览器 2.打开论坛主页:http://www.hordehome.com/ 3.查找元素之前可以先设置元素等待:implicitly_wait() 4.点登录按钮,弹出登录框 5 ...

  4. selenium+python自动化之操作浏览器

    一.打开网站 1.第一步:从selenium里面导入webdriver模块 2.打开Firefox浏览器(Ie和Chrome对应下面的) 3.打开百度网址 二.设置休眠 1.由于打开百度网址后,页面加 ...

  5. 服饰行业淘宝商城店铺首页设计报告-转载自http://bbs.paidai.com/topic/88363

    店铺的设计 和 美工是2个完全不同的工作. 很多中小卖家,往往会模糊他们之间的差别. 好比要建造一座金茂大厦,先要有建筑设计师设计图纸,明确好建造的楼层数,具体框架结构,所用材料等等. 然后建筑施工队 ...

  6. Java自带工具jstack故障分析的一个案例

    公司的一个web应用项目运行了很长一段时间,达半年之久,前段时间突然出现了服务不可用的情况,所有的请求都不可达,服务彻底挂了.查看tomcat进程还在,cpu使用率低,一时没找着问题,重启了服务.过了 ...

  7. wcf stream 不知道长度的情况下,读取stream

    http://bbs.csdn.net/topics/360163784 string filepath = @"http://ww4.sinaimg.cn/thumbnail/6741e0 ...

  8. FullCalendar

    一个非常完美的日期控件:https://fullcalendar.io/

  9. erlang使用leveldb

    用的是诺顿的开源库,参考url来自这里 下载 git clone git@github.com:/norton/lets.git 编译 cd lets ./rebar get-deps ./rebar ...

  10. 基于session的简易购物车引发的问题

    一.功能描述:  页面如下所示: 运行报错: java.io.FileNotFoundException: E:\apache-tomcat-8.0.37\work\Catalina\localhos ...