题意:

输入数据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. 【转】3篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:官方原生方法分析

    作者: 牛A与牛C之间 时间: 2013-11-17 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第3篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  2. asp.net 计算两个时间差

    两个时间相差多少 .net中的timespan应用2008/11/10 11:54TimeSpan 对象表示时间间隔或持续时间,按正负天数.小时数.分钟数.秒数以及秒的小数部分进行度量.用于度量持续时 ...

  3. Character 比较注意先要转换成字符串类型

    Character tmp = '/'; if("/".equals(tmp)){ System.out.print("error"); } if(" ...

  4. 移动端H5页面的设计稿尺寸大小规范-转载自http://www.chinaz.com/design/2015/1103/465670.shtml

    机屏幕尺寸,设计稿应该按照哪一个尺寸作为标准尺寸.现在已经有2K分辨率的手机屏幕了,设计稿是不是也要把宽高跟着最大分辨率来设计.显然不是. 请注意:(以下所有讨论内容和规范均将viewport设定为c ...

  5. Unable to resolve target 'android-i'

    重新装完Ecplise+ATD+Android SDK 在Ecplise工作空间导入之前写过的Android项目会出现错误,大部分是SDK 版本不符,如下错误提示:Error:Unable to re ...

  6. 剑指offer系列59---寻找丑数

    [题目]把只包含因子2.3和5的数称作丑数(Ugly Number). * 例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 解法一 ...

  7. @synthesize obj = _obj 理解

    在很多代码里可以看到类似得用法: @interface MyClass:NSObject{ MyObjecct *_object; } @property(nonamtic, retain) MyOb ...

  8. Workflow_工作流发送Document和Form链接的实现(案例)

    2014-06-01 Created By BaoXinjian

  9. AP_AP系列 - 费用报表分析(案例)

    2014-07-08 Created By BaoXinjian

  10. sublime代码片段功能

    tools - > developer - > new snippet有了这个,你就可以通过iu这两个键,直接弄出自己的模板了,这就很方便了,不用在复制粘贴了.上是代码模板,下面是快捷键, ...