提供一种极易理解的纯模拟做法。

虽然时空都不是很优秀,但是距离时空超限还绰绰有余。并且没有运用什么深奥的算法与技巧,非常适合算法初学者,并且还留有极大的优化空间。

理解题意,题目要求我们求出是否有工厂可以生产其他所有工厂的镜子,为满足这个要求,那么符合条件的工厂的 $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的更多相关文章

  1. BZOJ3715: [PA2014]Lustra

    3715: [PA2014]Lustra Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 237  Solved: 149[Submit][Status ...

  2. [PA2014]Lustra

    [PA2014]Lustra 题目大意: 有n个工厂参加竞标.每个工厂能生产长度在\([a_i,b_i]\)之间,宽度在\([c_i,d_i]\)之间的镜子,镜子不可以旋转. 问是否有某个工厂能生产出 ...

  3. bzoj3715: [PA2014]Lustra(乱搞)

    3715: [PA2014]Lustra 题目:传送门 题解: 随手一发水题x1 随便排序一下...小学生题??? 代码: #include<cstdio> #include<cst ...

  4. BZOJ 3715: [PA2014]Lustra

    Description Byteasar公司专门外包生产带有镜子的衣柜.刚刚举行的招标会上,有n个工厂参加竞标.所有镜子都是长方形的,每个工厂能够制造的镜子都有其各自的最大.最小宽度和最大.最小高度. ...

  5. 【set】bzoj3715 [PA2014]Lustra

    对每种属性开一个set,只要某个厂家符合该属性的最值,就加进set,最后判断是否有某个厂家在4个set里都存在即可. #include<cstdio> #include<set> ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. BZOJ 3721: PA2014 Final Bazarek

    3721: PA2014 Final Bazarek Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 645  Solved: 261[Submit][ ...

  8. BZOJ 3709: [PA2014]Bohater

    3709: [PA2014]Bohater Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1050  Solved: ...

  9. [PA2014] [BZOJ 3709]~[BZOJ 3719] 合集

    今天起尝试做套题喵~ (当然是因为被最大流的题目弄得恶心死了) 一共是 10 道题一道一道做 预计 3~4 内做完 尽情期待 [BZOJ 3709]Bohater 一眼就能感受到贪心的气息 因为很直观 ...

  10. bzoj3714: [PA2014]Kuglarz

    [PA2014]KuglarzTime Limit: 20 Sec Memory Limit: 128 MBSubmit: 553 Solved: 317[Submit][Status][Discus ...

随机推荐

  1. AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类

    引言 人工智能(AI)技术的迅猛发展推动了各行各业的数字化转型.图像分类,作为计算机视觉领域的核心技术之一,能够让机器自动识别图像中的物体.场景或特征,已广泛应用于医疗诊断.安防监控.自动驾驶和电子商 ...

  2. go sync.map的使用

    前言 数据竞争是并发情况下,存在多线程/协程读写相同数据的情况,必须存在至少一方写.另外,全是读的情况下是不存在数据竞争的. Go语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全 ...

  3. mysql-8.0.19-winx64.zip 的安装与卸载

    一.安装 1.下载mysql 官网:https://dev.mysql.com/downloads/mysql/,本人用的目前的最新版本8.0.19,版本格式为zip,如下图 2.解压到指定路径,如下 ...

  4. 一文速通Python并行计算:00 并行计算的基本概念

    一文速通 Python 并行计算:00 并行计算的基本概念 摘要: 该文介绍了 Python 并行计算的核心概念.编程模型及其应用,并介绍了了并行程序的性能分析与优化方法,如并行效率.加速比及 Amd ...

  5. DeepSeek 官方推出的实用集成工具百宝箱,建议收藏!

    项目介绍 该实用集成工具百宝箱汇聚了DeepSeek官方精心挑选和推荐的各类集成工具(其中包括:应用程序.AI Agent 框架.AI数据应用框架.RAG 框架.浏览器插件.VS Code 插件等), ...

  6. 面试题-MyBatis框架

    前言 MyBatis框架部分的题目,是我根据Java Guide的面试突击版本V3.0再整理出来的,其中,我选择了一些比较重要的问题,并重新做出相应回答,并添加了一些比较重要的问题,希望对大家起到一定 ...

  7. 内部类--成员内部类、静态内部类、局部内部类--java进阶day03

    1.内部类 内部类分为4种,成员内部类用处不大,静态内部类和局部内部类更是鸡肋,唯有匿名内部类是需要我们重点掌握的 1.成员内部类 Inter类要访问Outer类的成员可以直接访问,而Outer要访问 ...

  8. 【Java】UDP套接字编程

    服务器 udpserver.java package server; import java.net.DatagramPacket; import java.net.DatagramSocket; i ...

  9. dotnet 命令启动报错

    Windows 7 或 Windows Server 2008 R2 上安装 .NET Core SDK 2.x 后 dotnet 命令启动报错 可以通过下载以下系统补丁解决 感谢下载 Windows ...

  10. 小了 60,500 倍,但更强;AI 的“深度诅咒”

    作者:Ignacio de Gregorio 图片来自 Unsplash 的 Bahnijit Barman 几周前,我们看到 Anthropic 尝试训练 Claude 去通关宝可梦.模型是有点进展 ...