P5995 [PA2014] Lustra
提供一种极易理解的纯模拟做法。
虽然时空都不是很优秀,但是距离时空超限还绰绰有余。并且没有运用什么深奥的算法与技巧,非常适合算法初学者,并且还留有极大的优化空间。
理解题意,题目要求我们求出是否有工厂可以生产其他所有工厂的镜子,为满足这个要求,那么符合条件的工厂的 $w1,w2,h1,h2$ 一定是最小的。所以可将问题转化为求所有数据中 $w1,w2,h1,h2$ 四个数的最小值,是否在同一工厂。
- 易错点:
Q:
那么不是在输入的时候将 $w1,w2,h1,h2$ 四个数的最小值,分别记录,并且记录下它们的下标就可以了吗?这不就是在一串数中找最大、最小值的位置吗?然后,如果 $w1,w2,h1,h2$ 四个数的最小值的下标都一样,就输出 TAK 否则输出 NIE。
A:
其实不然,请看数据(在 $n=4$ 时):
1 5 2 3
2 3 2 6
1 5 1 6
1 5 1 4
$w1,w2$ 的最小值都存在于第一家工厂、第三家工厂和最后一家工厂中。但是一般性的查询 $w1,w2$ 两个数的最大、最小值的下标都会记录第一家工厂或最后一家工厂。然后程序就会发现 $h1,h2$ 两个数的最大、最小值的下标不在第一家工厂,与最后一家工厂,从而输出 NIE。但答案确是 TAK。
如何解决这种情况呢?我们可以将输入进来的 $w1,w2,h1,h2$ 四个数与前边已经计算好的 $w1,w2,h1,h2$ 的最大、最小值比较,如果等于最大、最小值,就将其加入标记数组中,代表这家工厂有可能有能力生产其他所有工厂的镜子。如果大于、小于最大、最小值,就见最大、最小值跟换,并清空标记数组。
这一部分的代码实现。
if(w1<=minw1){
if(w1==minw1) fw1[i]=1;
else {
minw1=w1;
memset(fw1,0,sizeof fw1);
fw1[i]=1;
}
}
整体代码实现:
#include<bits/stdc++.h>
using namespace std;
int T,n;
int minw1,maxw2,minh1,maxh2;
bool fw1[100001],fw2[100001],fh1[100001],fh2[100001];
int main(){
cin>>T;
while(T--){
minw1=minh1=10e9+1;
maxw2=maxh2=-1;
int a,b,c,d;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a>>b>>c>>d;
//这一部分已讲解,不再添加注释。
if(a<=minw1){
if(a==minw1) fw1[i]=1;
else {
minw1=a;
memset(fw1,0,sizeof fw1);
fw1[i]=1;
}
}
if(b>=maxw2){
if(b==maxw2) fw2[i]=1;
else {
maxw2=b;
memset(fw2,0,sizeof fw2);
fw2[i]=1;
}
}
if(c<=minh1){
if(c==minh1) fh1[i]=1;
else {
minh1=c;
memset(fh1,0,sizeof fh1);
fh1[i]=1;
}
}
if(d>=maxh2){
if(d==maxh2) fh2[i]=1;
else {
maxh2=d;
memset(fh2,0,sizeof fh2);
fh2[i]=1;
}
}
}
//遍历 n 家工厂,如果某家工厂四个数值都符合条件,输出 TAK。
bool flag=1;
for(int i=1;i<=n;i++){
if(fw1[i]&&fw2[i]&&fh1[i]&&fh2[i]){
cout<<"TAK"<<'\n';
flag=0;
break;
}
}
if(flag) cout<<"NIE"<<'\n';
memset(fh2,0,sizeof fh2);
memset(fh1,0,sizeof fh1);
memset(fw2,0,sizeof fw2);
memset(fw1,0,sizeof fw1);
}
return 0;
}
P5995 [PA2014] Lustra的更多相关文章
- BZOJ3715: [PA2014]Lustra
3715: [PA2014]Lustra Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 237 Solved: 149[Submit][Status ...
- [PA2014]Lustra
[PA2014]Lustra 题目大意: 有n个工厂参加竞标.每个工厂能生产长度在\([a_i,b_i]\)之间,宽度在\([c_i,d_i]\)之间的镜子,镜子不可以旋转. 问是否有某个工厂能生产出 ...
- bzoj3715: [PA2014]Lustra(乱搞)
3715: [PA2014]Lustra 题目:传送门 题解: 随手一发水题x1 随便排序一下...小学生题??? 代码: #include<cstdio> #include<cst ...
- BZOJ 3715: [PA2014]Lustra
Description Byteasar公司专门外包生产带有镜子的衣柜.刚刚举行的招标会上,有n个工厂参加竞标.所有镜子都是长方形的,每个工厂能够制造的镜子都有其各自的最大.最小宽度和最大.最小高度. ...
- 【set】bzoj3715 [PA2014]Lustra
对每种属性开一个set,只要某个厂家符合该属性的最值,就加进set,最后判断是否有某个厂家在4个set里都存在即可. #include<cstdio> #include<set> ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 3721: PA2014 Final Bazarek
3721: PA2014 Final Bazarek Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 645 Solved: 261[Submit][ ...
- BZOJ 3709: [PA2014]Bohater
3709: [PA2014]Bohater Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1050 Solved: ...
- [PA2014] [BZOJ 3709]~[BZOJ 3719] 合集
今天起尝试做套题喵~ (当然是因为被最大流的题目弄得恶心死了) 一共是 10 道题一道一道做 预计 3~4 内做完 尽情期待 [BZOJ 3709]Bohater 一眼就能感受到贪心的气息 因为很直观 ...
- bzoj3714: [PA2014]Kuglarz
[PA2014]KuglarzTime Limit: 20 Sec Memory Limit: 128 MBSubmit: 553 Solved: 317[Submit][Status][Discus ...
随机推荐
- dockerfile 由于公钥不可用,无法验证以下签名
报错 当我在打包 docker镜像时,发生了报错 $ sudo docker build -t dcgm-exporter:3.2.5 . 1.772 The following signatures ...
- Ubuntu20.04搭建k8s v1.23.3版本集群
前言 服务器统一版本 Ubuntu 20.04 搭建集群最少要两台服务器 每台服务器都需要 docker.环境配置.安装 kubeadm.kubelet 和 kubectl docker 安装 doc ...
- vue 判断某个时间小于当前时间
如下 new Date().getTime() 获取当前时间(毫秒) 我需要对比的时间为秒,所以需要除于1000 <div v-if="scope.row.created_at < ...
- Django项目如何配置日志文件信息
1.以dict的方式配置在settings.py中 # 日志文件简单配置 ''' LOGGING = { "version": 1, "disable_existing_ ...
- 【uniapp】文本控件多余文字省略号代替
多余文字使用省略号效果 代码 .l-dd-content{ width: 100%; color: #8b8b8b; display: -webkit-box; /** 对象作为伸缩盒子模型显示 ** ...
- VirtualBox 新建虚拟电脑时没有64-bit选项?
好久没用VirtualBox了,没事下载了个准备看下新版的Ubuntu 16.04 & umake命令. 下载&安装完成,准备新建的时候,发现个问题:没有64-bit的选项? 目测了下 ...
- 《机器人SLAM导航核心技术与实战》第1季:第11章_自主导航中的数学基础
<机器人SLAM导航核心技术与实战>第1季:第11章_自主导航中的数学基础 视频讲解 [第1季]11.第11章_自主导航中的数学基础-视频讲解 [第1季]11.1.第11章_自主导航中的数 ...
- C#/.NET/.NET Core技术前沿周刊 | 第 32 期(2025年3.24-3.31)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- 二叉树专题学习(C++版) 基础的上机题
前言: 由于二叉树这一章的题型比较多,涉及到的递归程序也较多,所以单开一个随笔来记录这个学习过程,希望对读者有帮助. 理论知识基础 在二叉树的选择题中,常常会涉及到对于最多或最少结点.最大或最小高度. ...
- 开箱即用!推荐一款Python开源项目:DashGo,支持定制改造为测试平台!
大家好,我是狂师. 市面上的开源后台管理系统项目层出不穷,对应所使用到的技术栈也不尽相同. 今天给大家推荐一款开源后台管理系统: DashGo,不仅部署起来非常的简单,而且它是基于Python技术栈实 ...