如果异或变为加法和减法,那么根据扩欧,$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. Python - __all__ 变量

    import * 当我们向文件导入某个模块时,导入的是该模块中那些名称不以下划线(单下划线 _ 或者双下划线 __ )开头的变量.函数和类 因此,如果不想模块文件中的某个对象被引入到其它文件中使用,可 ...

  2. 洛谷3348 大森林 (LCT + 虚点 + 树上差分)

    这可真是道神仙题QWQ问了好多\(dalao\)才稍微明白了一丢丢做法 首先,我们假设不存在\(1\)操作,那么对于询问的一段区间中的所有的树,他们的形态应该是一样的 甚至可以直接理解为\(0\)操作 ...

  3. js--typeof 和 instanceof 判断数据类型的区别及开发中的使用

    前言 日常的开发中,我们经常会遇到判断一个变量的数据类型或者该变量是否为空值的情况,你是如何去选择判断类型的操作符的?本文来总结记录一下我们开发人员必须掌握的关于 typeof 和 instanceo ...

  4. SoapUI入门实例

    一.Soapui介绍 WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数.参数和返回值.它是WebSer ...

  5. C++手动加载CLR运行托管程序(CLR Hosting)

    转载自:http://www.linuxidc.com/Linux/2012-10/72293.htm 机制介绍 有些时候主程序是通过C/C++实现的,但是我们希望通过托管代码来扩展非托管程序,从而也 ...

  6. vue3.x相对于vue2.x生命周期改动

    vue3.x已经正式发布了,部分小伙伴已经用了vue3.x开发,部分小伙伴还在观望中,下面是两个影响比较大的改动 1.beforeDestroy和destroyed不能用了. 这个应该是vue2.x项 ...

  7. (一)、Docker 简介

    1.Docker镜像是什么? 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 2.Do ...

  8. Noip模拟49 2021.9.7

    T1 reverse 又一道板子打假的挂分题,直接挂到倒二.. 考场上思路神奇,居然想到用$bfs$建边然后跑最短路, 其实当时也想到了直接$bfs$,但是不知道为啥觉得$dij$屌就没直接打$bfs ...

  9. Spring的Ioc与DI

    一.前言 Spring框架的核心基于控制反转的原理. IoC是一种将组件依赖关系的创建和管理外部化的技术. 考虑一个示例,其中Foo类依赖于Bar类的实例来执行某种处理. 传统上,Foo使用new运算 ...

  10. 阿里P7面试官:请你简单说一下类加载机制的实现原理?

    面试题:类加载机制的原理 面试官考察点 考察目标: 了解面试者对JVM的理解,属于面试八股文系列. 考察范围: 工作3年以上. 技术背景知识 在回答这个问题之前,我们需要先了解一下什么是类加载机制? ...