题意:

输入数据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. 使用git pull文件时和本地文件冲突怎么办?

    同事在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息: error: Your local changes to 'c/environ.c' would be overwritten ...

  2. jQuery 追加元素的方法如append、prepend、before

    1.jQuery append() 方法 jQuery append() 方法在被选元素的结尾插入内容. 实例 复制代码代码如下: $("p").append("Some ...

  3. java提供的默认list排序方法-转

    1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list. ...

  4. Pop Sequence

    题目来源:PTA02-线性结构3 Pop Sequence   (25分) Question:Given a stack which can keep M numbers at most. Push ...

  5. C#子线程刷新界面并关闭窗体

    目的:要循环刷新界面上的控件,同时不影响用户操作.循环结束后关闭窗体. 步骤:先创建一个窗体,窗体中拖入一个lable控件(label1),一个button控件(button1) 代码窗口输入: // ...

  6. SourceInsight支持Python代码阅读

    这个话题,很简单,主要是要有一个插件Python.CLF,这个文件可以从我的GitHub上下载.然后,参照下面的图片显示的步骤,就很快搞定! 具体的步骤,看下面的三张图片,顺序编号了,从1到9,对照着 ...

  7. [原]Linux系统管理使用技巧总结

    一.磁盘管理 1.查看磁盘空间大小 df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. du可以查看文件及文件夹的大小.如果不带其他参数(-h表示human-readabl ...

  8. [转]使用eclipse+pydev远程调试OpenStack

    作者:张华  发表于:2014-01-17版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 1, ...

  9. 黄聪:如何阻止iframe里引用的网页自动跳转

    今天做了个网页,要在网页里设置一个iframe,然后套用其他的网站.使用http://luanqi-cat.blogbus.com 这个网址的时候,出现了莫名其妙的问题,我的网页居然会强制自动跳转到这 ...

  10. 黄聪:如何添加360浏览器(chrome)添加JavaScript例外,禁止网站加载JS

    注意:通配符两侧的[]不能省略