如果异或变为加法和减法,那么根据扩欧,$k$合法当且仅当$k|\gcd_{i=1}^{n}a_{i}$

换一种方式定义约数:$x$是$y$的约数当且仅当存在$p_{i}\in \{0,1\}$使得$\sum_{i=0}^{\infty}2^{i}x=y$,那么类似的,再把加法改为异或,我们就得到了本题中关于约数的定义

如何求$d=\gcd(x,y)$:假设$x$的最高位为$2^{p}$,$y$的最高位为$2^{q}$(二进制下,且不妨假设$p\ge q$),那么有$d|x$和$d|2^{p-q}y$,又因为$d|x$,所以$d|(x\oplus 2^{p-q}y)$,即$\gcd(x,y)=\gcd(y,x-2^{p-q}y)$

对于求gcd的过程,每一次必然会使得最高位-1,可以通过bitset优化到$o(\frac{nL^{2}}{64})$

令$d=\gcd_{i=1}^{n}a_{i}$,考虑$k\le C$等价于$k\oplus C$的最高位上的1是$C$的1或$k\oplus C$为0,因此枚举$k\oplus C$第一个非0的位置(通过$p_{i}$来控制),最后再判断所有$p_{i}$都确定了(即$k\oplus C$在$d$最高位即以上都为0时)能否即可

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 4005
4 #define mod 998244353
5 struct ji{
6 int l;
7 bitset<N>a;
8 }m,a[11];
9 int n,ans,mi[N];
10 char s[N];
11 void read(ji &a){
12 scanf("%s",s);
13 a.l=strlen(s);
14 for(int i=0;i<a.l;i++)a.a[a.l-i]=s[i]-'0';
15 }
16 ji gcd(ji x,ji y){
17 if (!y.l)return x;
18 x.a^=(y.a<<x.l-y.l);
19 while ((x.l)&&(!x.a[x.l]))x.l--;
20 if (x.l<y.l)swap(x,y);
21 return gcd(x,y);
22 }
23 void write(ji a){
24 for(int i=a.l;i;i--){
25 int p=a.a[i];
26 printf("%d",p);
27 }
28 printf("\n");
29 }
30 int main(){
31 mi[0]=1;
32 for(int i=1;i<N-4;i++)mi[i]=mi[i-1]*2%mod;
33 scanf("%d",&n);
34 read(m);
35 read(a[1]);
36 for(int i=2;i<=n;i++){
37 read(a[i]);
38 if (a[1].l<a[i].l)swap(a[1],a[i]);
39 a[1]=gcd(a[1],a[i]);
40 }
41 if (m.l<a[1].l){
42 printf("1");
43 return 0;
44 }
45 ji s=m;
46 for(int i=m.l;i>=a[1].l;i--){
47 if (m.a[i])ans=(ans+mi[i-a[1].l])%mod;
48 if (s.a[i])s.a^=(a[1].a<<i-a[1].l);
49 }
50 ans=(ans+1)%mod;
51 for(int i=a[1].l-1;i;i--)
52 if (s.a[i]){
53 if (!m.a[i])ans=(ans+mod-1)%mod;
54 break;
55 }
56 printf("%d",ans);
57 }

[atARC084F]XorShift的更多相关文章

  1. Atcoder Regular Contst 084 D - XorShift(bitset)

    洛谷题面传送门 & Atcoder 题面传送门 没错,这就是 Small Multiple 那场的 F,显然这种思维题对我来说都是不可做题/cg/cg/cg 首先如果我们把每个二进制数看作一个 ...

  2. ARC084F - XorShift

    有两种解法,这里都放一下. 解法一 首先易知异或运算可以视作是 \(\mathbb{F}_2\) 意义下的每一位独立的加法. 因此我们可以考虑对于每个二进制数 \(s\) 构造一个多项式 \(F(x) ...

  3. canvas星星炫耀

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 11.Object方法

    综述 Object是Java中所有类的父类,对它的学习十分的重要, Object的函数除了final方法,基本上都是被设计为要被覆盖的(Override),这节我们就一起来学习这些函数. 1.equa ...

  5. 【原创】开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...

  6. 【JAVA并发编程实战】10、并发程序的测试

    1.产生随机数 package cn.study.concurrency.ch12; public class Util { public static int xorShift(int y) { / ...

  7. 浅谈Java中的hashcode方法

    哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...

  8. Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap

    概要 本章对Java.util.concurrent包中的ConcurrentSkipListMap类进行详细的介绍.内容包括:ConcurrentSkipListMap介绍ConcurrentSki ...

  9. Java多线程 LockSupport

    在AQS里面进行阻塞线程,解除阻塞线程就用的LockSupport. JDK1.8源码: package java.util.concurrent.locks; import sun.misc.Uns ...

随机推荐

  1. Rclone使用教程 - 挂载Onedrive和谷歌网盘

    1. 介绍 Rclone 是一个用于多个云平台之间同步文件和目录的命令行工具,其支持多种运营商网盘. 官网网址:https://rclone.org 开源地址:https://github.com/n ...

  2. 给力!斩获 GitHub 14000 Star,两周创办开源公司获数百万美元融资

    文章来源|AI科技大本营 作者|伍杏玲 上世纪 90 年代初,21 岁大学生 Linus Torvalds 开源 Linux 操作系统,自此掀起全球开源浪潮.随后"中国 Linux 第一人& ...

  3. ls命令剖析

    目录 ls命令剖析 资料翻译 SYNOPSIS 使用方式 DESCRIPTION 说明 参数的说明 -l 参数字符的解释 文件权限的解释 FILES 文件夹 实战演练 ls 命令 ls -l 命令 l ...

  4. Vue Router 常见问题(push报错、push重复路由刷新)

    Vue Router 常见问题 用于记录工作遇到的Vue Router bug及常用方案 router.push报错,Avoided redundant navigation to current l ...

  5. 文本域textarea的一个小细节

    文本域代码在编写时,最好写在一行上,就像: 如果没写在一行上,如: 那么就会在后续生成的页面上输入的时候就会产生一段空白无法删除: 这是写文本框的时候的一个小细节

  6. 微信小程序中路由跳转

    一.是什么 微信小程序拥有web网页和Application共同的特征,我们的页面都不是孤立存在的,而是通过和其他页面进行交互,来共同完成系统的功能 在微信小程序中,每个页面可以看成是一个pageMo ...

  7. CQL和SQL的CRUD操作比较

    数据进行CRUD操作时,CQL语句和SQL语句的异同之处. 1.建表 2.CRUD语句比较 3.总结 1.建表 在此之前先分别创建两张表,插入数据,用来测试然后进行比较 在SQL数据库里面创建表 在C ...

  8. 【UE4 C++】打印字符串与输出日志

    打印屏幕 默认打印屏幕 // 打印至屏幕 FString screenMessage = "(AddOnScreenDebugMessage) Hello world!"; GEn ...

  9. Java:Object对象小记

    Java:Object对象小记 对 Java 中的 Object 对象,做一个微不足道的小小小小记 Object 的常用方法有哪些 clone() 方法:用于创建并返回当前对象的一份拷贝: 在Java ...

  10. CSP踩被记

    本来想起个清新脱俗的标题,但碍于语文功底不行,于是光明正大嫖了LiBoyi的高端创意,把这篇博客命名为踩被记. Day -6 用假暴力把真正解拍没了,伤心.Rp有点低 Day -4 信息学考,\(py ...