[COCI] Zamjena

连这种模拟题都能。。。orz

ex,太恶心了!

驰骋坑底这么久了,我明白了

在这里插入图片描述
开始吧!我发誓,这个超级兵,我就算用小书包平A都要A了它

题目

Vlatko喜欢使用整数数组,他在一张纸上写下了两个数组,每个数组一共n个元素。每一个元素可以是一个正整数,也可以是由一串小写英文字母组成的字符串。由英文字母组成的序列可以替换为任意整数,如果同一字符串出现多次,那么这些字符串都必须用相同的整数进行替换。

Vlatko想知道是否可以用一些整数来替换所有的字符串,使得两个数组相同。如果数组相同位置上的数字相同,则认为两个数组相同。

输入格式
第一行包含一个正整数n(1≤n≤50000),即每个数组中的元素数。
第二行包含第一个数组的n个元素。
第三行包含第二个数组的n个元素。

两个数组中的每个元素都可以是:
1)小于1000的正整数或
2)表示变量的英文字母(不超过10个字符)的小写字母字符串

输出格式
如果两个字符串可能相同,则输出”DA”,否则,输出”NE”。

样例
样例输入1
3
3 1 2
3 1 x
样例输出1
DA
样例输入2
4
4 5 iks ipsilon
1 iks 3 iks
样例输出2
NE
样例输入3
5
x 3 x y 3
x y 2 z 3
样例输出3
DA
数据范围与提示
在样例3中,答案的解为x=2,y=3,z=3,此时两个数组相等(2,3, 2, 3, 3)

题解

这道题没有用到任何的知识点,你只要会用map会打include就可以了!
这道题就是一个纯纯的裸裸的的没有装饰的模拟题,矛盾就可以直接return 0
然而我爆零!orz
在这里插入图片描述
首先模拟考虑的几种NE情况:
1.当ai,bi都是数字并且不相同
2.ai,bi其中有一个是数字,另一个是字母但是已经处理出了值,且与数字不相同
3.两个都是字母,这个情况比较难搞!
(1)两个字母都还没有被处理,都是可变化的,这个时候我们要先勇敢跳过
(2)两个字母都已经处理,并且值不相同
(3)有一个字母被处理了,另外一个字母可变化,这个时候就可以确定那个字母了

在一重循环之后,我们不能确定每一个字母都已经处理好了,
而且可能遇到以下几种变态情况(卡了我n天啊!orz)
举个栗子
1 b c d
b c d 2 这样一个一个顺次对应
a b c d 2
2 a b c d这样一个一个逆次对应
a b c d 1 e f g h
z a b c d f g h d 这样从中间断开顺逆对应

就是每一次循环只能更新出一个字母的极限情况,意思到了就行了!

而且为了get到这个字母可能与那些字母成为对应关系,我们就要用map套一个vector去存储

你想想当n足够大的时候,是不是要从头和从尾都为起点跑一次,那这样再循环中还要处理vector,
跟个两重循环一样,不T,天理不容

所以这一块一定要想个优化,因为我们每次都是0~size-1进行循环处理,所以一旦这个父亲有值过后,
一次循环就能让这些0~size-1都有值,那么下一次碰到他们的时候,就没有必要花个时间再询问一遍
加个break,就能优化过AC!!
这个还是本仙女昨天想睡觉临门一脚给想到的!!我都要拜倒在自己的石榴裙下了!!

这道题当然可以用并查集A,听说代码量也不是很黑人,但是我不会!尴尬ing
大佬们可以去写写,然后教教我这个无知的人!
在这里插入图片描述

直接上马!

代码实现

#include <map>
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
#define MAXN 50005
map < string, int > flag;
map < string, vector < string > > G;
bool isnum ( char x ) {if ( x >= '0' && x <= '9' ) return 1;return 0;
}
int n;
string a[MAXN], b[MAXN];
int main() {scanf ("%d", &n );for ( int i = 1;i <= n;i ++ )cin >> a[i];for ( int i = 1;i <= n;i ++ )cin >> b[i];for ( int i = 1;i <= n;i ++ ) {if ( isnum ( a[i][0] ) && isnum( b[i][0] ) ) {if ( a[i] != b[i] ) return ! printf ( "NE" );}else {if ( isnum ( a[i][0] ) && ! isnum ( b[i][0] ) ) {int num = 0, len = a[i].length();for ( int j = 0;j < len;j ++ )num = ( num << 1 ) + ( num << 3 ) + ( a[i][j] - '0' );if ( flag[b[i]] && flag[b[i]] != num )return ! printf ( "NE" );flag[b[i]] = num;for ( int j = 0;j < G[b[i]].size();j ++ ) {if ( flag[G[b[i]][j]] && flag[G[b[i]][j]] != flag[b[i]] )return ! printf ( "NE" );else if ( flag[G[b[i]][j]] == flag[b[i]] ) break;flag[G[b[i]][j]] = flag[b[i]];}}else {if ( ! isnum ( a[i][0] ) && isnum ( b[i][0] ) ) {int num = 0, len = b[i].length();for ( int j = 0;j < len;j ++ )num = ( num << 1 ) + ( num << 3 ) + ( b[i][j] - '0' );if ( flag[a[i]] && flag[a[i]] != num )return ! printf ( "NE" );flag[a[i]] = num;for ( int j = 0;j < G[a[i]].size();j ++ ) {if ( flag[G[a[i]][j]] && flag[G[a[i]][j]] != flag[a[i]] )return ! printf ( "NE" );else if ( flag[G[a[i]][j]] == flag[a[i]] ) break;flag[G[a[i]][j]] = flag[a[i]];}}else {G[a[i]].push_back ( b[i] );G[b[i]].push_back ( a[i] );}}}}for ( int i = n;i >= 1;i -- ) {if ( ! isnum ( a[i][0] ) && ! isnum( b[i][0] ) ) {if ( flag[a[i]] && flag[b[i]] && flag[a[i]] != flag[b[i]] ) return ! printf ( "NE" );if ( ! flag[a[i]] && ! flag[b[i]] ) continue;if ( flag[a[i]] ) flag[b[i]] = flag[a[i]];else flag[a[i]] = flag[b[i]];for ( int j = 0;j < G[a[i]].size();j ++ ) {if ( flag[G[a[i]][j]] && flag[G[a[i]][j]] != flag[a[i]] )return ! printf ( "NE" );else if ( flag[G[a[i]][j]] == flag[a[i]] ) break;flag[G[a[i]][j]] = flag[a[i]];}for ( int j = 0;j < G[b[i]].size();j ++ ) {if ( flag[G[b[i]][j]] && flag[G[b[i]][j]] != flag[b[i]] )return ! printf ( "NE" );else if ( flag[G[b[i]][j]] == flag[b[i]] ) break;flag[G[b[i]][j]] = flag[b[i]];}}if ( ! isnum ( a[i][0] ) && isnum ( b[i][0] ) ) {int num = 0, len = b[i].length();for ( int j = 0;j < len;j ++ )num = ( num << 1 ) + ( num << 3 ) + ( b[i][j] - '0' );if ( ! flag[a[i]] ) flag[a[i]] = num;if ( flag[a[i]] != num ) return ! printf ( "NE" );for ( int j = 0;j < G[a[i]].size();j ++ ) {if ( flag[G[a[i]][j]] && flag[G[a[i]][j]] != flag[a[i]] )return ! printf ( "NE" );else if ( flag[G[a[i]][j]] == flag[a[i]] ) break;flag[G[a[i]][j]] = flag[a[i]];}}if ( ! isnum ( b[i][0] ) && isnum ( a[i][0] ) ) {int num = 0, len = a[i].length();for ( int j = 0;j < len;j ++ )num = ( num << 1 ) + ( num << 3 ) + ( a[i][j] - '0' );if ( ! flag[b[i]] ) flag[b[i]] = num;if ( flag[b[i]] != num ) return ! printf ( "NE" );for ( int j = 0;j < G[b[i]].size();j ++ ) {if ( flag[G[b[i]][j]] && flag[G[b[i]][j]] != flag[b[i]] )return ! printf ( "NE" );else if ( flag[G[b[i]][j]] == flag[b[i]] ) break;flag[G[b[i]][j]] = flag[b[i]];}}}for ( int i = 1;i <= n;i ++ ) {if ( ! isnum ( a[i][0] ) && ! isnum( b[i][0] ) ) {if ( flag[a[i]] && flag[b[i]] && flag[a[i]] != flag[b[i]] ) return ! printf ( "NE" );if ( ! flag[a[i]] && ! flag[b[i]] ) continue;if ( flag[a[i]] ) flag[b[i]] = flag[a[i]];else flag[a[i]] = flag[b[i]];for ( int j = 0;j < G[a[i]].size();j ++ ) {if ( flag[G[a[i]][j]] && flag[G[a[i]][j]] != flag[a[i]] )return ! printf ( "NE" );else if ( flag[G[a[i]][j]] == flag[a[i]] ) break;flag[G[a[i]][j]] = flag[a[i]];}for ( int j = 0;j < G[b[i]].size();j ++ ) {if ( flag[G[b[i]][j]] && flag[G[b[i]][j]] != flag[b[i]] )return ! printf ( "NE" );else if ( flag[G[b[i]][j]] == flag[b[i]] ) break;flag[G[b[i]][j]] = flag[b[i]];}}if ( ! isnum ( a[i][0] ) && isnum ( b[i][0] ) ) {int num = 0, len = b[i].length();for ( int j = 0;j < len;j ++ )num = ( num << 1 ) + ( num << 3 ) + ( b[i][j] - '0' );if ( ! flag[a[i]] ) flag[a[i]] = num;if ( flag[a[i]] != num ) return ! printf ( "NE" );for ( int j = 0;j < G[a[i]].size();j ++ ) {if ( flag[G[a[i]][j]] && flag[G[a[i]][j]] != flag[a[i]] )return ! printf ( "NE" );else if ( flag[G[a[i]][j]] == flag[a[i]] ) break;flag[G[a[i]][j]] = flag[a[i]];}}if ( ! isnum ( b[i][0] ) && isnum ( a[i][0] ) ) {int num = 0, len = a[i].length();for ( int j = 0;j < len;j ++ )num = ( num << 1 ) + ( num << 3 ) + ( a[i][j] - '0' );if ( ! flag[b[i]] ) flag[b[i]] = num;if ( flag[b[i]] != num ) return ! printf ( "NE" );for ( int j = 0;j < G[b[i]].size();j ++ ) {if ( flag[G[b[i]][j]] && flag[G[b[i]][j]] != flag[b[i]] )return ! printf ( "NE" );else if ( flag[G[b[i]][j]] == flag[b[i]] ) break;flag[G[b[i]][j]] = flag[b[i]];}}}printf ( "DA" );return 0;
}

啊~AC了这道题,世界都有了光彩,真香!这里是决心把品牌做进世界前五百强的现场,
欢迎致电139红酒白酒葡萄酒!
在这里插入图片描述
有任何问题,欢迎留言,xgg,xjj我们再见哦~

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

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

相关文章

P7470-[NOI Online 2021 提高组]岛屿探险【Trie,CDQ分治】

正题 题目链接:https://www.luogu.com.cn/problem/P7470 题目大意 给出nnn个二元组(a,b)(a,b)(a,b)。 qqq次询问给出(l,r,c,d)(l,r,c,d)(l,r,c,d)表示询问[l,r][l,r][l,r]中有多少二元组满足cxora≤min(b,d)c\ xor\ a\leq min(b,d)c xor a≤min(b,d)。 1≤n,q≤1051\leq n,q\…

P2601 [ZJOI2009]对称的正方形(二维哈希)(二分)

洛谷传送门 文章目录题目描述解析代码题目描述 解析 做三个hash 分一下正方形边长的奇偶性 然后枚举中心点&#xff0c;二分边长即可 有点类似模拟赛那道红十字的题 我一开始觉得分奇偶好麻烦啊 为什么不直接枚举左上方的点二分呢&#xff1f;awa 很遗憾的是… 那样答案就没有…

初赛—错题集

计算机基础知识 LAN&#xff1a;局域网&#xff0c;WAN&#xff1a;广域网&#xff0c;MAN&#xff1a;城域网 汇编语言是(依赖于具体计算机)的低级程序设计语言 计算机操作的最小时间单位是(时钟周期)。 注意所需空间需要 \(\div 8\) &#xff01;&#xff01;&#xff01;…

.NET Core 和 DevOps

关键要点无论你目前使用什么样的技术栈&#xff0c;DevOps 都是值得一试的。闭源、专有软件和构建过程与 DevOps 实践不兼容。.NET Core 是开源的&#xff0c;是基于 DevOps 构思和构建的。.NET Core CLI 和 Roslyn API 让整个交付流程变得更加开放&#xff0c;且具有更强的适应…

2021 NOI游记

文章目录前言day1总结T1 轻重边(0/50)考后得分T2 路径交点(0/20)考后得分T3 庆典(28/44)赛后得分day2总结T1 量子通信(20/12)赛后得分T2 密码箱(0/35)赛后得分T3 机器人游戏(12/12)赛后得分总结前言 62pts 太惨了 &#xff08;只是参加了同步赛而已&#xff09; 感觉心态受到了…

【每日一题】1月29日题目 和与或

题意&#xff1a; 给你一个数组R&#xff0c;包含N个元素&#xff0c;求有多少满足条件的序列A使得 0 ≤ A[i] ≤ R [ i ] A[0]A[1]…A[N−1] A[0] | ]A[1]… | A [ N − 1 ] 输出答案对1e99取模 题解&#xff1a; 参考博客 数位dp问题 如果和等于或的话&#xff0c;说明两…

Message Decoding密码翻译

这是一道模拟题ex 其实每一道模拟题都很“简单”&#xff0c; 这道题就是难在读英文题&#xff01;处理输入&#xff01; 真的我竟然花了几个小时就只是为了看懂样例&#xff01;&#xff01;orz 题目大意 考虑下面的01串序列&#xff1a; 0&#xff0c;00&#xff0c;01…

AT3945-[ARC092D]Two Faced Edges【dfs】

正题 题目链接:https://www.luogu.com.cn/problem/AT3945 题目大意 nnn个点mmm条边的一张图&#xff0c;对于每条边求它翻转后强连通分量数量是否变化。 1≤n≤1000,1≤m≤21051\leq n\leq 1000,1\leq m\leq 2\times 10^51≤n≤1000,1≤m≤2105 解题思路 对于一条(x,y)(x,y)(…

记录一些 sb 错误

记录一些 sb 错误 离散化的最小值 \(val_0\) 应该赋值为不可能达到的值( \(val_0-\infty\) )函数传参数从右到左&#xff0c;在 f(rd(),rd()) 后会反过来。连续的 if 中记得加上 else。因为在 if 中可能会改变下一个 if 的判断条件(如某一次洛谷月赛)数组不要开小啦&#xff01…

.NET Core开发日志——结构化日志

在.NET生态圈中&#xff0c;最早被广泛使用的日志库可能是派生自Java世界里的Apache log4net。而其后来者&#xff0c;莫过于NLog。Nlog与log4net相比&#xff0c;有一项较显著的优势&#xff0c;它支持结构化日志。结构化日志&#xff0c;也被称为语义化日志。其作用有二&…

YBTOJ 特殊数列(哈希表)

文章目录题目描述解析代码题目描述 解析 应该是哈希表板子题了 选一个1e6左右的质数进行处理即可 其实本质就是链前 没啥特别新鲜的 为什么要写呢&#xff1f; 因为这个东西很早之前看的时候完全没有看懂。。。 代码 #include<bits/stdc.h> using namespace std; #def…

欧拉图、哈密顿图

欧拉图 OI-Wiki 原文 定义 通过图中所有边恰好一次且行遍所有顶点的 通路 称为欧拉通路。 通过图中所有边恰好一次且行遍所有顶点的 回路 称为欧拉回路。 具有欧拉回路 的无向图或有向图称为 欧拉图 。 具有欧拉通路但不具有欧拉回路 的无向图或有向图称为 半欧拉图 。 非形式化…

Strange Definition CodeForces - 1471D

题意&#xff1a; 定义数字 x 和 y 是“相邻”的当且仅当 lcm(x,y)/gcd(x,y) 是一个平方数。 给定一个长度为 n 的数组 a。 每过一秒&#xff0c;数组 a 会发生变化&#xff1a;ai 会变成数组 a 中与其“相邻”的所有数字的乘积。 定义 di 为数组 a 中与 ai “相邻” 的数字个…

学习三分 (概念 + 模板 + 例题:曲线)

这好像是我第一次尝试写一个新知识入门 而不是习题解 文章目录三分概念模板例题&#xff1a;曲线题目题解代码实现三分概念 我们都知道&#xff0c;二分是在一个单调函数&#xff08;即一次函数&#xff09;上通过每次查找折半的方式&#xff0c;对答案进行搜索查找。那么&am…

P3291-[SCOI2016]妖怪【凸壳】

正题 题目链接:https://www.luogu.com.cn/problem/P3291 题目大意 给出 nnn 个数字对 (atk,dnf)(atk,dnf)(atk,dnf)&#xff0c;求一个(a,b)(a,b)(a,b)。 对于每个数字对可以选择任意一个实数kkk让其变为(atkka,dnf−ka)(atkk\times a,dnf-k\times a)(atkka,dnf−ka)&#x…

迎元旦,庆surging 1.0发布

一位摄影程序员的独白每个人都有爱好&#xff0c;都有释放压力的活动&#xff0c;而我也不例外&#xff0c;我除了每天上班&#xff0c;周末就会约一群好友去拍妹子&#xff0c;成家后&#xff0c;就改为拍虫子&#xff0c;一拍就到了30岁&#xff0c;到了30岁就感觉到了中年的…

YBTOJ:求好元素(哈希表)

文章目录题目描述解析代码题目描述 解析 如果枚举m,n,p的话是n3的 会超时 但我们注意到右边查询只有O(n) 这就很不平衡 所以考虑把p移到右边&#xff0c;预处理枚举m、n存到哈希表中 查询枚举i、p 这样就把复杂度均摊降到了n2 但是本题数据较强 所以我们得保证哈希表的单词查询…

Strange Shuffle CodeForces - 1471E(交互题)

交互题 这类型不同于普通的题。 可以理解为有个问题需要你解决&#xff0c;你通过输入某些东西表示你要问系统的问题&#xff0c;这时系统会回答你的问题。在代码中的回答方式就是会输入某个东西就是系统给你的答案&#xff0c;通过这些信息你可以得到问题的解你是不可以自己测…

学习KMP (概念 + 模板 + 例题: 子串查找)

我又回来了&#xff0c;感jio这几天有点勤啊&#xff01;&#xff01; 这一次我带着KMP来了&#xff0c; 文章目录KMP介绍模板例题&#xff1a; 子串查找题目暴力题解KMP题解代码实现KMP介绍 KMP&#xff0c;即 Knuth-Morris-Pratt 字符串查找算法&#xff0c;由Donald Knuth…

直播预告 - 博时基金DevOps体系建设和自动化测试分享

最近几年&#xff0c;基金行业发展比较快&#xff0c;业务范围从传统公募到大资管&#xff0c;业务地域从中国大陆到全球化&#xff0c;在互联网金融浪潮中扮演了重要角色&#xff0c;金融科技又带来新的挑战和机遇。据毕马威2014年研究报告显示&#xff0c;由于新技术、人口变…