info: { blogIcon: 'https://cdn.luogu.com.cn/upload/usericon/765493.png', blogUser: 'OIerBoy', blogAvatar: 'https://cdn.luogu.com.cn/upload/usericon/765493.png', blogStartDate: '2023-04-22', webpageTitleOnblur: '(o?v?)ノ Hi', webpageTitleOnblurTimeOut: 1000, webpageTitleFocus: '(*′?`*) 欢迎回来!', webpageTitleFocusTimeOut: 1000, webpageIcon: "https://cdn.jsdelivr.net/gh/BNDong/Cnblogs-Theme-SimpleMemory@master/img/webp/blog_logo.webp", { enable: true, // 是否开启日/夜间模式切换按钮 auto: { // 自动切换相关配置 enable: false, // 开启自动切换 dayHour: 5, // 日间模式开始时间,整数型,24小时制 nightHour: 19 // 夜间模式开始时间,整数型,24小时制 } } },

[ABC150F] Xor Shift

2023-03-10

题目

题目传送门

翻译

翻译

难度&重要性(1~10):6

题目来源

AtCoder

题目算法

KMP,Z函数

解题思路

首先是按位确定,令 \(t(i,j)\) 表示 AA 序列向右移动 \(j\) 位后异或某一个数能否等于 \(B\) 序列,则如果所有 \(t(i,q)\ \ (i\in [1,30])\) 都是 \(1\),移动 \(q\) 位才是一个可行的答案。
原问题就成了一个全是 \(0,1\) 的问题。
异或一下就相当于是全体取反,所以设 \(cntA,cntB\) 分别是 \(A,B\)\(1\) 的个数,如果 \(cntA=cntB\),那么可以不异或任何数,如果恰好 \(cntA+cntB=n\),那么可以 \(A\) 序列全部取反再与 \(B\)B 匹配。

完成状态

posted @ 2023-05-01 23:13  OIerBoy  阅读(77)  评论(0)    收藏  举报