ZOJ 3042 City Selection II 【序】【离散化】【数学】
题意:
输入数据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 【序】【离散化】【数学】的更多相关文章
- Selection II
[Selection II] 1.上.下.左.右键可以移动Selection 1个像素.按住Shift键,可以一次移动10个像素. 2.Add Selection模式的快捷键是Shift,Sub Se ...
- HDU 4358 莫队算法+dfs序+离散化
Boring counting Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 98304/98304 K (Java/Others)T ...
- 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 ...
- 【BZOJ1645】[Usaco2007 Open]City Horizon 城市地平线 离散化+线段树
[BZOJ1645][Usaco2007 Open]City Horizon 城市地平线 Description Farmer John has taken his cows on a trip to ...
- ZOJ 3332 Strange Country II
Strange Country II Time Limit: 1 Second Memory Limit: 32768 KB Special Judge You want to v ...
- ZOJ 3956 Course Selection System
题意 有n节课可供选择,每节课都有两个值Hi和Ci,如果学生选择了m节课(x1,x2,....,xm),则它的舒适值被定义为: //这里没有公式((lll¬ω¬)),因为那个图片我保存不下来≧ ﹏ ≦ ...
- zoj 3356 Football Gambling II【枚举+精度问题】
题目: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3356 http://acm.hust.edu.cn/vjudge/ ...
- ZOJ 2301/HDU 1199 线段树+离散化
给这个题目跪了两天了,想吐简直 发现自己离散化没学好 包括前一个离散化的题目,实际上是错了,我看了sha崽的博客后才知道,POJ那题简直数据弱爆了,本来随便一组就能让我WA掉的,原因在于离散化的时候, ...
- HDU 4358 Boring counting(莫队+DFS序+离散化)
Boring counting Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 98304/98304 K (Java/Others) ...
随机推荐
- Zookeeper 源码分析-启动
Zookeeper 源码分析-启动 博客分类: Zookeeper 本文主要介绍了zookeeper启动的过程 运行zkServer.sh start命令可以启动zookeeper.入口的main ...
- TKinter之菜单
菜单的分类也较多,通常可以分为下拉菜单.弹出菜单. 1.使用Menu类创建一个菜单 2.add_command添加菜单项,如果该菜单是顶层菜单,则添加的菜单项依次向右添加. 如果该菜单时顶层菜单的一个 ...
- 重绘TabControl
本文转载自:http://blog.csdn.net/conmajia/article/details/7596718 作者:野比 (conmajia@gmail.com) 时间:May, 2012 ...
- thinkphp禁止模版标签解析
场景: 页面中某些样式或者js中含有tp定义的模版标签,如果被tp当成模版标签解析,就会解析异常. tp中提供了<literal></literal>标签用于禁止标签内部的代码 ...
- js封常用类
ajax刷 下拉框联动 /*基础初始化类*/ $.EBC = { setCourse:function(obj){ $(obj).empty(); $.get('../Index/getCoursei ...
- 关于git配合tortoiseGit的基础使用
一定要自己写出来才能牢记,所以我来写一下 git确实比svn好用的多了,最起码只有一个文件夹用来标记版本信息比svn所有文件夹下都要放一个文件夹来标记版本信息先进多了,不然你不想要版本管理这些文件的时 ...
- 跟我一起写Makefile--- 变量(嵌套变量+追加变量+overrid+多行变量+环境变量+目标变量+模式变量)
目录(?)[-] 使用变量 一变量的基础 二变量中的变量 三变量高级用法 四追加变量值 五override 指示符 六多行变量 七环境变量 八目标变量 九模式变量 使用变量 ———— 在Makefil ...
- asp.net中Respons.Write()的用法
很多时候,我们为了是页面的传输速率更高.很自然回去选择脚本和ajax结合进行传值,在传值如要向页面回传数据时,可能只有一次也会是多次.一次的情况下我们可以很好的用Respons.End()方法来截取我 ...
- Perl 模块 Getopt::Std 和 Getopt::Long
示例程序: getopt.pl; 1 2 3 4 5 6 7 8 #!/usr/bin/perl -w #use strict; use Getopt::Std; use vars qw($opt_a ...
- 106. Construct Binary Tree from Inorder and Postorder Traversal
Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...