【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~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matrix Equation

题意&#xff1a; 题目给出两个矩阵X,Y,现在有两种操作 Z X Y D X⊙Y 问是否存在一个矩阵C&#xff0c;使得ACB⊙C式子成立&#xff0c;问矩阵C能有多少个 题解&#xff1a; 这个式子在模2意义下的加法就等于异或 也就相当于 那现在有 将BC移到左边 然后将Ci,j的系数进…

eShopOnContainers 知多少[6]:持久化事件日志

1. 引言事件总线解决了微服务间如何基于集成事件进行异步通信的问题。然而只有事件总线正常运行&#xff0c;微服务之间基于事件的通信才得以运转。 而现实情况是&#xff0c;总有这样或那样的问题&#xff0c;导致事件总线不稳定或不可用&#xff0c;比如&#xff1a;网络中断…

单调队列优化DP

全局最优解必然包含局部最优解&#xff0c;因此每次转移只需考虑局部最优解&#xff01;&#xff01;&#xff01; 主要内容 形如这样 的 \(\operatorname{DP}\) 转移方程&#xff1a; \[dp[i]\max_{L_i\le j\le R_i}{\{dp[i]val(i,j)\}} \]满足&#xff1a; \(\{L_i\}\) , \(\…

CF1322B-Present【双指针】

正题 题目链接:https://www.luogu.com.cn/problem/CF1322B 题目大意 给出nnn个数字aia_iai​求 ⨁i1n⨁ji1n(aiaj)\bigoplus _{i1}^n\bigoplus _{ji1}^n(a_ia_j)i1⨁n​ji1⨁n​(ai​aj​) 1≤n≤4105,1≤ai≤1071\leq n\leq 4\times 10^5,1\leq a_i\leq 10^71≤n≤4105,1≤a…

多体问题

代码&#xff1a; function SunEarthMoon % M函数文件load planets; % 将planets.mat中的变量mass、position、velocity加载过来[sun, earth, moon] deal(18, 3, 25); % sun、earth、moon分别是18、3、25行 list [sun, earth, moon]; % 1行3列矩阵 G 6.67e-11; % gr…

【CF1179 A,B,C】Valeriy and Deque / Tolik and His Uncle / Serge and Dining Room

还好题很温柔&#xff0c;温柔得我差点没做完 文章目录A&#xff1a;Valeriy and Deque题意题解代码实现B&#xff1a;Tolik and His Uncle题目题解代码实现C&#xff1a;Serge and Dining Room题目题解代码实现A&#xff1a;Valeriy and Deque 题意 给定一个双端队列&#…

YBTOJ:比赛得分(期望)

文章目录题目描述解析代码题目描述 解析 不太难的题 显然本题在AB队员大小关系相反时其对答案的贡献互为相反数。 所以想到把B队队员sort一下后就可以二分找到大小关系相反的分界点 然后维护和与平方和两个前缀数组搞一搞即可O1求出贡献 总复杂度&#xff1a;nlognnlognnlogn …

Matlab与高等数学

曲线与曲面画图 平面 对于不同曲线的表达式&#xff0c;Matlab中有不同的绘图命令&#xff0c;主要有 plot, fplot, ezplot&#xff0c;plot3&#xff0c;polar&#xff0c; 曲面 1.2 曲面画图 曲面的一般方程是F(x,y,z)0&#xff0c;一般需要将曲面的点坐标先表示出来&…

[USACO19JAN,Platinum] Redistricting

[USACO19JAN,Platinum] Redistricting 这道题A了才知道。。并不难a&#xff01; orz 题目 内存限制&#xff1a;128 MiB 时间限制&#xff1a;1000 ms 题目描述 奶牛们的最大城市Bovinopolis正在重新划分势力范围—生活在那里的主要是两个品种的奶牛&#xff08;Holsteins和…

.NET Core + JWT令牌认证 + Vue.js 通用动态权限(RBAC)管理系统框架[DncZeus]开源啦!!!...

DncZeus前言关于 DncZeusDncZeus Dnc Zeus"Dnc"--.Net Core 的缩写&#xff1b;"Zeus"--中文译为宙斯&#xff0c;是古希腊神话中的众神之王&#xff0c;奥林匹斯十二主神之首&#xff0c;统治宇宙万物的至高无上的主神&#xff08;在古希腊神话中主神专…

[gdoi2018 day1]小学生图论题【分治NTT】

正题 题目大意 一张随机的nnn个点的竞赛图&#xff0c;给出它的mmm条相互无交简单路径&#xff0c;求这张竞赛图的期望强联通分量个数。 1≤n,m≤1051\leq n,m\leq 10^51≤n,m≤105 解题思路 先考虑m0m0m0的做法&#xff0c;此时我们考虑一个强联通块的贡献&#xff0c;注意到…

背包问题 DP

各种各样的基础背包 0-1 背包 非常朴素&#xff0c;复杂度 \(O(nV)\) void z_o_pack(int c,int v) {for(int iV;i>c;i--)dp[i]max(dp[i],dp[i-c]v); } 完全背包 复杂度 \(O(nV)\) void comp_pack(int c,int v) {for(int ic;i<V;i)dp[i]max(dp[i],dp[i-c]v); } 多重背包 单…

P5081 Tweetuzki爱取球(期望)(线性求逆元)

文章目录题目描述解析代码题目描述 解析 首先有一个很重要的引理&#xff1a; 若一件事做成的概率是p&#xff0c;则其做成需要次数的期望是1/p 为什么呢&#xff1f; 我们设做成这件事的期望次数是x 就可以列出方程&#xff1a; x1p∗0(1−p)∗xx1p*0(1-p)*xx1p∗0(1−p)∗x …

Matlab与线性代数

文章目录多项式求解1.2 多项式四则运算1.3 多项式的分解与合并行列式求解3、矩阵基本运算➢ 3.2 矩阵的取块和变换➢ 3.3 矩阵的基本运算4、求解线性方程组多项式求解 ➢ 1.1 多项式表达式与根 有关多项式函数表达式与根的Matlab命令&#xff1a; poly2sym 返回由多项式系数转…

【 CF1186D,E,F】Vus the Cossack and Numbers/Vus the Cossack and a Field/Vus the Cossack and a Graph

太ex了&#xff0c;哭了哭了orz 后面两道平均一道花了我一天啊&#xff01; 文章目录D&#xff1a;Vus the Cossack and Numbers题意翻译题解代码实现E&#xff1a;Vus the Cossack and a Field题意翻译题解代码实现F:Vus the Cossack and a Graph题目暴力题解代码实现官方题解…

IdentityServer4与ocelot实现认证与客户端统一入口

关于IdentityServer4与ocelot博客园里已经有很多介绍我这里就不再重复了。ocelot与IdentityServer4组合认证博客园里也有很多&#xff0c;但大多使用ocelot内置的认证&#xff0c;而且大多都是用来认证API的&#xff0c;查找了很多资料也没看到如何认证oidc&#xff0c;所以这里…

CF1556D-Take a Guess【交互】

正题 题目链接:https://codeforces.com/contest/1556/problem/D 题目大意 现在有nnn个你不知道的数字&#xff0c;你有两种询问操作 询问两个下标的数字的andandand询问两个下标的数字的ororor 要求在2n2n2n次操作以内求出第kkk小的数字 1≤n≤104,0≤ai≤1091\leq n\leq 1…

YBTOJ:彩球抽取(期望)

文章目录题目描述解析代码题目描述 解析 首先&#xff0c;可以使用dp解决本题 设fi,j,k&#xff1a;操作i轮之后编号j的小球有k个的概率 转移和统计答案就都不难了 但是还有一个问题 不难发现这个题循环下去是可以无穷无尽的 所以限定一个i的上界&#xff08;如500000&#xf…

魔改森林

题意&#xff1a; 曾经有一道叫做迷雾森林的题目&#xff0c;然而牛牛认为地图中的障碍太多&#xff0c;实在是太难了&#xff0c;所以删去了很多点&#xff0c;出了这道题。 牛牛给出了一个n行m列的网格图 初始牛牛处在最左下角的格点上(n1,1)&#xff0c;终点在右上角的格点…

基于IdentityServer4 实现.NET Core的认证授权

IdentityServer4是什么&#xff1f;IdentityServer4是基于ASP.NET Core实现的认证和授权框架&#xff0c;是对OpenID Connect和OAuth 2.0协议的实现。OpenID Connect 和 OAuth2.0是什么OpenID Connect:OpenID Connect由OpenID基金会于2014年发布的一个开放标准, 是建立在OAuth …