当前位置: 首页 > news >正文

AtCoder Beginner Contest 327 题解 A-D

A - ab

原题链接

题目描述
判断一个给定的字符串是否存在字符a和字符b相邻。

public static void solve() throws IOException{int a = readInt();String s = readString();boolean f = s.contains("ab") || s.contains("ba");printWriter.println(f ? "Yes" : "No");
}

B - A^A

原题链接

题目描述
给定一个整数B,判断是否存在一个整数A,使得 A A = B A^A=B AA=B,如果存在,输出 A A A,否则输出 − 1 -1 1

思路:枚举

public static void solve() throws IOException{long a = readLong();boolean f = false;for (int i = 1; i <= 100; i++) {long q = 1;for (int j = 1; j <= i; j++) {q *= i;}if (q == a) {printWriter.println(i);f = true;break;}if (q > a) break;}if (!f) {printWriter.println(-1);}
}

C - Number Place

原题链接

题目描述
给定义一个 9 × 9 9 \times 9 9×9 的二维矩阵,判断这个矩阵是否满足以下全部条件,如果满足输出Yes,否则输出No

  • 1 ∼ 9 1 \sim 9 19的数字分别都在每行每列出现一次。
  • 将该二维矩阵按顺序拆为 9 9 9 3 × 3 3 \times 3 3×3 的二维矩阵后, 1 ∼ 9 1 \sim 9 19的数字分别都在每个矩阵出现一次。

思路:模拟+技巧

  • 先判断每行每列是否满足条件。
  • 再判断每个小二维矩阵是否满足条件。
public static void solve() throws IOException{int[][] map = utils.nextIntArray(9, 9);boolean f = true;// 判断行n = 9;for (int i = 1; i <= n; i++) {Set<Integer> set = new HashSet<>();for (int j = 1; j <= n; j++) {set.add(map[i][j]);}if (set.size() != 9) f = false;}// 判断列for (int i = 1; i <= n; i++) {Set<Integer> set = new HashSet<>();for (int j = 1; j <= n; j++) {set.add(map[j][i]);}if (set.size() != 9) f = false;}// 判断小圈int[] x = new int[] {1, 4, 7}, y = new int[] {3, 6, 9};for (int a = 0; a < 3; a++) {// 控制行for (int b = 0; b < 3; b++) {// 控制列Set<Integer> set = new HashSet<>();for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {// 处于该小圈范围内if (i >= x[a] && i <= y[a] && j >= x[b] && j <= y[b]) {set.add(map[i][j]);}}}if (set.size() != 9) {f = false;break;}}}printWriter.println(f ? "Yes" : "No");
}

D - Good Tuple Problem

原题链接

题目描述
给定一个数组 S S S 和一个数组 T T T,长度都为 M M M。问是否存在一个长度为 N N N01 数组 X X X,使得 X S i ≠ X T i ( 1 ≤ i ≤ N ) X_{S_i} \neq X_{T_i}(1 \leq i \leq N) XSi=XTi(1iN),如果存在,输出 Yes,否则输出 No

输入样例

3 3
1 2 3
2 3 1

输出样例

No

思路:并查集+技巧

  • 这题仅问我们是否存在,而不要求求出序列 X X X,那么可以使用并查集,将 X X X 存在矛盾的两个位置记录下来,关键在于怎么维护存在矛盾的两个位置。
  • 使用 N N N作为偏移量,每遍历到一对 S i S_i Si T i T_i Ti 时,可以理解为都是在染色。
    ① 如果 p [ S i ] ≠ p [ T i ] p[S_i] \neq p[T_i] p[Si]=p[Ti],那么就分别更新他们的父节点为 f i n d ( T i + n ) find(T_i + n) find(Ti+n) f i n d ( S i + n ) find(S_i + n) find(Si+n),表示 S i S_i Si不能和 f i n d ( T i + n ) find(T_i + n) find(Ti+n)染同一种颜色, T i T_i Ti不能和 f i n d ( S i + n ) find(S_i + n) find(Si+n)染同一种颜色。
    ② 如果 p [ S i ] = p [ T i ] p[S_i] = p[T_i] p[Si]=p[Ti],假设为 p p p,此时 S i S_i Si 不能和 p p p 染同一种颜色, T i T_i Ti不能和 p p p 染同一种颜色,但是 S i S_i Si 又不能和 T i T_i Ti 染同一种颜色,但是总共又只能染两种颜色,这时就出现了矛盾。
static int[] p;public static void solve() throws IOException{int n = readInt(), m = readInt();int[] s = new int[m + 1], t = new int[m + 1];for (int i = 1; i <= m; i++) s[i] = readInt();for (int i = 1; i <= m; i++) t[i] = readInt();p = new int[2 * n + 1];for (int i = 1; i <= 2 * n; i++) p[i] = i;boolean f = true;for (int i = 1; i <= m; i++) {int a = s[i], b = t[i];int pa = find(a), pb = find(b);if (pa == pb) {// 出现矛盾f = false;break;}p[pa] = find(b + n);p[pb] = find(a + n);}printWriter.println(f ? "Yes" : "No");
}public static int find(int x) {if (x != p[x]) {p[x] = find(p[x]);}return p[x];
}

相关文章:

  • Unity3D移动开发如何依据性能选择Shader
  • 01-单节点部署clickhouse及简单使用
  • 校验 ChatGPT 4.0 真实性的三个经典问题:快速区分 GPT3.5 与 GPT4,并提供免费测试网站
  • 台球厅桌球室计时计算软件计费方法,台球厅的电脑怎么计时
  • 由于flutter_app依赖于flutter_swiper>=0.0.2,不支持零安全,版本解决失败。
  • 短视频矩阵营销系统工具如何助力商家企业获客?
  • vscode 阅读 android以及kernel 源码
  • Python 中的 Gzip 解压
  • windows内存取证-中等难度-下篇
  • RIP路由配置
  • Adobe After Effects 2024(Ae2024)在新版本中的升级有哪些?
  • 分布式多主关系数据库的底线业务优势
  • NocoDB任意文件读取漏洞复现
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • 1.2 HTML5
  • 【剑指offer】让抽象问题具体化
  • 03Go 类型总结
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • css选择器
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • java第三方包学习之lombok
  • JDK 6和JDK 7中的substring()方法
  • MySQL数据库运维之数据恢复
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Twitter赢在开放,三年创造奇迹
  • web标准化(下)
  • 将回调地狱按在地上摩擦的Promise
  • 来,膜拜下android roadmap,强大的执行力
  • 前端面试之CSS3新特性
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 微信小程序:实现悬浮返回和分享按钮
  • 详解移动APP与web APP的区别
  • 学习笔记TF060:图像语音结合,看图说话
  • 译自由幺半群
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 数据可视化之下发图实践
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # 飞书APP集成平台-数字化落地
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (四)linux文件内容查看
  • (五)Python 垃圾回收机制
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • ***通过什么方式***网吧
  • .Net 8.0 新的变化
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .Net Web项目创建比较不错的参考文章
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化