这道题也是一个ex的模拟题

不过他比Zamjena可爱


作为一个帅气的小哥哥,让我们一起,
开启你的模拟ex大门,C++从入门到放弃!

题目

题目描述
我又来了!我又来了!
在清晨来到儿童游乐园的时候,出题人看到了一些有趣的物体:这些物体是由金属棒组成的大小不一的立方体。

在观察这些立方体的时候,出题人想到了一个有趣的问题,下面是这个问题的二维版本(因为没有人喜欢涉及三维对象的问题):你得到一个n*n的矩形(参考正方形),矩形中的一些方格是空的,有些不是。出题人从四面八方查看这个矩形,首先,他从矩形的左边开始看,记录下第一个不为空的方格的前面有多少个空格,如果这一行没有非空方格,则记录为-1。然后,他重复前面的操作,从右边,上面和下面观察这个矩形,这样,他得到了4n个这样的数字(每个边记录n个数字),然而,某个未知恶魔破坏了这个矩形,只留下了出题人留下的数字。出题人想知道,留下的这些数字是否有意义,即通过这些数字,是否能够组成一个正方形。

输入格式
第一行包含正整数n(1≤n≤100000),表示这个正方形的边长。
第二行输入n个数字Li(-1≤Li<n),表示从左边观察时第一个到第n个数字。
第三行输入n个数字Ri(-1≤Ri<n),表示从右边观察时第一个到第n个数字。
第四行输入n个数字Ui(-1≤Ui<n),表示从上边观察时第一个到第n个数字。
第五行输入n个数字Di(-1≤Di<n),表示从下边观察时第一个到第n个数字。
输出格式
如果这些数字能组成一个正方形,输出“DA”,否则输出“NE”

样例
样例输入1
3
-1 2 0
-1 0 1
2 2 1
0 0 1
样例输出1
DA
样例输入2
3
-1 0 1
-1 2 1
-1 2 -1
1 0 -1
样例输出2
NE

题解

既然要输出DA,NE,那肯定是绑点了的,想单纯骗分很考技术!
读完题后肯定知道如果相互矛盾就是NE,不然就是DA,
没有必要去把整个矩阵给模拟构造出来,
只需要去判断四个数组条件是否相互冲突即可

接下来冲突的情况口头上讲解是比较难以理解
可以画一画样例跟着一起推帮助理解

左右,上下冲突的情况:l+r>=n,u+d>=n
证明:只有1个非空点i,那么l应该为i-1,r应该为n-i,相加是n-1,证毕

左与上下,右与上下,上与左右,下与左右,垂直冲突的情况:
以证明左与上下为例:
如果l=-1,那么这一行就都是空,
那么任何一个u,d的非空位置都不能出现在这一行上
可以把这四种情况合成一个for循环完成

因为每一个l,r,u,d是第一个非空的位置-1
这中间可能有很多个非空
我们就只能找到第一个进行判断

代码实现

因为我的代码力。。。
这道题我把n砍成了一半,里面有些许变化

#include <cstdio>
#define MAXN 100005
int n;
int l[MAXN], r[MAXN], u[MAXN], d[MAXN];
bool L[MAXN], R[MAXN], U[MAXN], D[MAXN];
int main() {scanf ( "%d", &n );for ( int i = 1;i <= n;i ++ )scanf ( "%d", &l[i] );for ( int i = 1;i <= n;i ++ )scanf ( "%d", &r[i] );for ( int i = 1;i <= n;i ++ )scanf ( "%d", &u[i] );for ( int i = 1;i <= n;i ++ )scanf ( "%d", &d[i] );for ( int i = 1;i <= n;i ++ ) {if ( l[i] + r[i] >= n || u[i] + d[i] >= n ) return ! printf ( "NE" );if ( l[i] != r[i] && ( l[i] == -1 || r[i] == -1 ) ) return ! printf ( "NE" );if ( u[i] != d[i] && ( u[i] == -1 || d[i] == -1 ) ) return ! printf ( "NE" );}for ( int i = 1;i <= n / 2;i ++ ) {if ( l[i] != -1 && u[l[i] + 1] == -1 ) return ! printf ( "NE" );if ( r[i] != -1 && u[n - r[i]] == -1 ) return ! printf ( "NE" );if ( u[i] != -1 && l[u[i] + 1] == -1 ) return ! printf ( "NE" );if ( d[i] != -1 && l[n - d[i]] == -1 ) return ! printf ( "NE" );if ( l[i] != -1 && ! L[l[i]] ) {L[l[i]] = 1;if ( u[l[i] + 1] > i - 1 ) return ! printf ( "NE" );}if ( r[i] != -1 && ! R[r[i]] ) {R[r[i]] = 1;if ( u[n - r[i]] > i - 1 ) return ! printf ( "NE" );}if ( u[i] != -1 && ! U[u[i]] ) {U[u[i]] = 1;if ( l[u[i] + 1] > i - 1 ) return ! printf ( "NE" );}if ( d[i] != -1 && ! D[d[i]] ) {D[d[i]] = 1;if ( l[n - d[i]] > i - 1 ) return ! printf ( "NE" );}}for ( int i = 1;i <= n;i ++ )L[i] = R[i] = U[i] = D[i] = 0;for ( int i = n;i > n / 2;i -- ) {if ( l[i] != -1 && d[l[i] + 1] == -1 ) return ! printf ( "NE" );if ( r[i] != -1 && d[n - r[i]] == -1 ) return ! printf ( "NE" );if ( u[i] != -1 && r[u[i] + 1] == -1 ) return ! printf ( "NE" );if ( d[i] != -1 && r[n - d[i]] == -1 ) return ! printf ( "NE" );if ( l[i] != -1 && ! L[l[i]] ) {L[l[i]] = 1;if ( d[l[i] + 1] > n - i ) return ! printf ( "NE" );}if ( r[i] != -1 && ! R[r[i]] ) {R[r[i]] = 1;if ( d[n - r[i]] > n - i ) return ! printf ( "NE" );}if ( u[i] != -1 && ! U[u[i]] ) {U[u[i]] = 1;if ( r[u[i] + 1] > n - i ) return ! printf ( "NE" );}if ( d[i] != -1 && ! D[d[i]] ) {D[d[i]] = 1;if ( r[n - d[i]] > n - i ) return ! printf ( "NE" );}}printf ( "DA" );return 0;
}

我终于A了一道结论题,

过不了多久,我会再发一篇ex至极的博客,Zamjena,仙女还没A这道题

有什么问题,欢迎留言,后会有期,bye~~

【COCI 2018/2019 Round #2】Kocka相关推荐

  1. COCI 2018/2019 CONTEST #2 T4 Maja T5Sunčanje Solution

    COCI 2018/2019 CONTEST #2 T4 T5 Solution abstract 花式暴力 #2 T5 Sunčanje 题意 按顺序给你1e5个长方形(左下角坐标&& ...

  2. 【EOJ Monthly 2019.02 - F】方差(数学,前缀和,积的前缀和)

    题干: 单测试点时限: 2.0 秒 内存限制: 256 MB "放弃不难,但坚持一定很酷." QQ 小方已经在体育馆苦练一天射箭了,但他还在坚持. QQ 小方每天都要在朋友圈晒自己 ...

  3. 【华为2018年校园招聘】算法岗笔试题

    我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 公众号介绍:Microstrong(小强)同学主要研究机器学习.深度学习.计算机视觉.智能对话系统相关内容,分享 ...

  4. COCI 2018/2019 CONTEST #2 Solution

    Problem1 Preokret 第一题一定不是什么难题. 第一个问题在读入的时候判断当前时间是不是在1440及以前就行 第二个问题考虑离线处理,由于每个时刻只能最多发生1个事件那么就弄个桶记录每一 ...

  5. dw2019怎么替换html,【Dreamweaver CC 2019怎么用】Dreamweaver CC 2019好不好_使用技巧-ZOL软件百科...

    Dreamweaver CC 2019简称DW CC 2019,这是由adobe推出的可视化网设计制作软件,软件提供了即见即所得的网页代码编辑工具,支持多显示器.hdipi,可以满足不同网页开发人员和 ...

  6. jzoj6001. 【PKUWC2019模拟2019.1.15】Mines (tarjan)

    题面 题解 我们把每个地雷向它能炸到的地雷连边,不难发现同一个强联通分量里的点只要一个炸全炸 那么我们缩点,首先所有入度为\(0\)的强联通分量中必须得选一个地雷炸掉,而入度不为\(0\)的强联通分量 ...

  7. [JZOJ6075]【GDOI2019模拟2019.3.20】桥【DP】【线段树】

    Description N,M<=100000,S,T<=1e9 Solution 首先可以感受一下,我们把街道看成一行,那么只有给出的2n个点的纵坐标是有用的,于是我们可以将坐标离散化至 ...

  8. JZOJ 6030. 【GDOI2019模拟2019.2.25】白白的

    Description Input Output Sample Input 4 3 6 0 10 1 1 2 1 0 1 2 Sample Output 1 1 0 Data Constraint S ...

  9. JZOJ 5987. 【WC2019模拟2019.1.4】仙人掌毒题

    Description Input 输入文件cactus .in 第一行4个空格隔开的整数n,m,t,w 接下来m行,每行两个空格隔开的整数u,v,表示m次加边操作. Output 输出文件为cact ...

最新文章

  1. 明确REST接口开发的核心任务
  2. 360°透视:云原生架构及设计原则
  3. TCP/IP详解--学习笔记(7)-广播和多播,IGMP协议
  4. python怎么读文件夹下的文件夹-如何使用Python读取文件夹中的文件数量?
  5. ubuntu19 安装git_如何在Ubuntu 20.04上安装Git
  6. CLion 2016.1新增Python、Swift支持,并改进了C++支持
  7. Sybase函数大全
  8. 技术面试问项目难题如何解决的_同轴线如何当网线使用?解决改造项目中难题...
  9. ORACLE修改表信息
  10. ajax error的报错提示
  11. kubunetes packages.cloud.google.com gpg:no valid OpenPGP data found
  12. 类似%-30的字串解码办法
  13. imx8 usb otg模式切换
  14. 记一次nginx配置服务器代理发送请求(外网请求内网ip)
  15. 遍历二维数组(从外向内绕圈)
  16. LiteMes系统中对于文件系统的文件删除使用
  17. NXP S32K1 FlexTimer模块
  18. 1875. 贝茜的报复
  19. 1.莫尔斯编码和布莱叶盲文
  20. 查看电脑自带的Office版本信息重新安装Office

热门文章

  1. 华为21级程序员月薪曝光:270k封神!众网友直呼长见识……
  2. 从生物神经网络到人工神经网络
  3. 代码传奇 | 明明可以靠颜值 却用代码把人类送上了月球的女人——Margaret Hamilton
  4. Java类集-SortedSet接口
  5. 火柴人_火柴人 x THANKSGIVING
  6. Java图形 图像与多媒体基础,十一. 图形、图像与多媒体1.绘图基础
  7. mysql表类型_MySQL表类型的选择
  8. 7-1 字母统计图 (10 分)(思路+详解)
  9. Leetcode周赛复盘——第 276 场力扣周赛
  10. 荣耀智慧屏功能曝光 首发华为鸿蒙OS,荣耀智慧屏功能曝光:首发华为鸿蒙OS,全场景智慧体验...