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

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

理解题意,题目要求我们求出是否有工厂可以生产其他所有工厂的镜子,为满足这个要求,那么符合条件的工厂的 $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. [tldr]windows使用scoop安装make工具辅助程序编译

    make是一个好用的GNU工具,用来辅助我们进行自动化的程序编译,只需要一个Makefile文件,即可实现一行指令自动编译 scoop是windows的一个包管理工具 安装 scoop bucket ...

  2. Paimon merge into 实现原理

    语法 MERGE INTO target USING source ON source.a = target.a WHEN MATCHED THEN UPDATE SET a = source.a, ...

  3. mac上zsh环境变量如何配置

    环境变量配置 在 macOS 上,如果你使用的是 zsh 作为默认的 shell,那么 /bin/zsh 的环境变量通常可以在以下文件中配置: ~/.zshrc ~/.zprofile ~/.zshe ...

  4. MySQL REPLACE函数:字符串替换

    语法 REPLACE ( string_expression , string_pattern , string_replacement ) 替换字符串,接受3个参数,分别是原字符串,被替代字符串,替 ...

  5. Django实战项目-学习任务系统-需求说明

    一,需求说明 在我最近的阅读中,我深深被一些关于智能或系统的小说吸引.这些小说的主角意外获得某种神秘的智能或系统,然后通过完成系统发布的各种任务,逐渐提升自己的知识和能力.即使是普通的屌丝,也能在系统 ...

  6. 使用Win32控制台实现boost共享内存通信

    发送端: #define BOOST_DATE_TIME_NO_LIB #include <boost/interprocess/shared_memory_object.hpp> #in ...

  7. Linux下查询tomcat进程命令

    由于查询tomcat进程时将ps -ef|grep tomcat命令记错为ps -f|grep tomcat命令,因此对比两个命令进行区分. ps -f |grep tomcat执行结果: dgztc ...

  8. TimeSpan 的 Milliseconds 和 TotalMilliseconds 有啥区别?

    有小伙伴问到 TimeSpan的 Milliseconds和TotalMilliseconds有啥区别啊? 我用TimeSpan.FromSeconds(3600).Milliseconds就获取到是 ...

  9. SpringMvc怎么样把数据带给页面

    例子. /** * SpringMVC除过在方法上传入原生的request和session外还能怎么样把数据带给页面 * * 1).可以在方法处传入Map.或者Model或者ModelMap. * 给 ...

  10. 使用 GitDiagram 快速将 GitHub 仓库转换为交互式图表

    前言 当面对 GitHub 上文件目录错综复杂的新项目,且你急需快速了解其系统设计或架构流程时,你可能会感到束手无策.今天大姚给大家分享一个开源利器 GitDiagram,它可以轻松将任何复杂的 Gi ...