【COCI 2018/2019 Round #2】Kocka
这道题也是一个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相关推荐
- COCI 2018/2019 CONTEST #2 T4 Maja T5Sunčanje Solution
COCI 2018/2019 CONTEST #2 T4 T5 Solution abstract 花式暴力 #2 T5 Sunčanje 题意 按顺序给你1e5个长方形(左下角坐标&& ...
- 【EOJ Monthly 2019.02 - F】方差(数学,前缀和,积的前缀和)
题干: 单测试点时限: 2.0 秒 内存限制: 256 MB "放弃不难,但坚持一定很酷." QQ 小方已经在体育馆苦练一天射箭了,但他还在坚持. QQ 小方每天都要在朋友圈晒自己 ...
- 【华为2018年校园招聘】算法岗笔试题
我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 公众号介绍:Microstrong(小强)同学主要研究机器学习.深度学习.计算机视觉.智能对话系统相关内容,分享 ...
- COCI 2018/2019 CONTEST #2 Solution
Problem1 Preokret 第一题一定不是什么难题. 第一个问题在读入的时候判断当前时间是不是在1440及以前就行 第二个问题考虑离线处理,由于每个时刻只能最多发生1个事件那么就弄个桶记录每一 ...
- dw2019怎么替换html,【Dreamweaver CC 2019怎么用】Dreamweaver CC 2019好不好_使用技巧-ZOL软件百科...
Dreamweaver CC 2019简称DW CC 2019,这是由adobe推出的可视化网设计制作软件,软件提供了即见即所得的网页代码编辑工具,支持多显示器.hdipi,可以满足不同网页开发人员和 ...
- jzoj6001. 【PKUWC2019模拟2019.1.15】Mines (tarjan)
题面 题解 我们把每个地雷向它能炸到的地雷连边,不难发现同一个强联通分量里的点只要一个炸全炸 那么我们缩点,首先所有入度为\(0\)的强联通分量中必须得选一个地雷炸掉,而入度不为\(0\)的强联通分量 ...
- [JZOJ6075]【GDOI2019模拟2019.3.20】桥【DP】【线段树】
Description N,M<=100000,S,T<=1e9 Solution 首先可以感受一下,我们把街道看成一行,那么只有给出的2n个点的纵坐标是有用的,于是我们可以将坐标离散化至 ...
- 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 ...
- JZOJ 5987. 【WC2019模拟2019.1.4】仙人掌毒题
Description Input 输入文件cactus .in 第一行4个空格隔开的整数n,m,t,w 接下来m行,每行两个空格隔开的整数u,v,表示m次加边操作. Output 输出文件为cact ...
最新文章
- 明确REST接口开发的核心任务
- 360°透视:云原生架构及设计原则
- TCP/IP详解--学习笔记(7)-广播和多播,IGMP协议
- python怎么读文件夹下的文件夹-如何使用Python读取文件夹中的文件数量?
- ubuntu19 安装git_如何在Ubuntu 20.04上安装Git
- CLion 2016.1新增Python、Swift支持,并改进了C++支持
- Sybase函数大全
- 技术面试问项目难题如何解决的_同轴线如何当网线使用?解决改造项目中难题...
- ORACLE修改表信息
- ajax error的报错提示
- kubunetes packages.cloud.google.com gpg:no valid OpenPGP data found
- 类似%-30的字串解码办法
- imx8 usb otg模式切换
- 记一次nginx配置服务器代理发送请求(外网请求内网ip)
- 遍历二维数组(从外向内绕圈)
- LiteMes系统中对于文件系统的文件删除使用
- NXP S32K1 FlexTimer模块
- 1875. 贝茜的报复
- 1.莫尔斯编码和布莱叶盲文
- 查看电脑自带的Office版本信息重新安装Office
热门文章
- 华为21级程序员月薪曝光:270k封神!众网友直呼长见识……
- 从生物神经网络到人工神经网络
- 代码传奇 | 明明可以靠颜值 却用代码把人类送上了月球的女人——Margaret Hamilton
- Java类集-SortedSet接口
- 火柴人_火柴人 x THANKSGIVING
- Java图形 图像与多媒体基础,十一. 图形、图像与多媒体1.绘图基础
- mysql表类型_MySQL表类型的选择
- 7-1 字母统计图 (10 分)(思路+详解)
- Leetcode周赛复盘——第 276 场力扣周赛
- 荣耀智慧屏功能曝光 首发华为鸿蒙OS,荣耀智慧屏功能曝光:首发华为鸿蒙OS,全场景智慧体验...