[atARC084F]XorShift
如果异或变为加法和减法,那么根据扩欧,$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的更多相关文章
- Atcoder Regular Contst 084 D - XorShift(bitset)
洛谷题面传送门 & Atcoder 题面传送门 没错,这就是 Small Multiple 那场的 F,显然这种思维题对我来说都是不可做题/cg/cg/cg 首先如果我们把每个二进制数看作一个 ...
- ARC084F - XorShift
有两种解法,这里都放一下. 解法一 首先易知异或运算可以视作是 \(\mathbb{F}_2\) 意义下的每一位独立的加法. 因此我们可以考虑对于每个二进制数 \(s\) 构造一个多项式 \(F(x) ...
- canvas星星炫耀
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 11.Object方法
综述 Object是Java中所有类的父类,对它的学习十分的重要, Object的函数除了final方法,基本上都是被设计为要被覆盖的(Override),这节我们就一起来学习这些函数. 1.equa ...
- 【原创】开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...
- 【JAVA并发编程实战】10、并发程序的测试
1.产生随机数 package cn.study.concurrency.ch12; public class Util { public static int xorShift(int y) { / ...
- 浅谈Java中的hashcode方法
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: 1 public native int hashCode(); 根据 ...
- Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap
概要 本章对Java.util.concurrent包中的ConcurrentSkipListMap类进行详细的介绍.内容包括:ConcurrentSkipListMap介绍ConcurrentSki ...
- Java多线程 LockSupport
在AQS里面进行阻塞线程,解除阻塞线程就用的LockSupport. JDK1.8源码: package java.util.concurrent.locks; import sun.misc.Uns ...
随机推荐
- java 从零开始手写 RPC (05) reflect 反射实现通用调用之服务端
通用调用 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RPC (02)-netty4 实现客户端和服务端 java 从零开始手写 RPC (03) 如何 ...
- 从源码解析Electron的安装为什么这么慢
前言 Electron作为一款跨平台的桌面应用端解决方案已经风靡全球.作为开发者,我们几乎不用关心与操作系统的交互,直接通过Web前端技术与Electron提供的API就可以完成桌面应用端的开发. 然 ...
- redis编译安装、哨兵、集群
编译安装 #下载源代码解压 wget https://download.redis.io/releases/redis-5.0.13.tar.gz -P /home/ tar -xvf /home/r ...
- RabbitMQ的消息可靠性(五)
一.可靠性问题分析 消息的可靠性投递是使用消息中间件不可避免的问题,不管是使用哪种MQ都存在这种问题,接下来要说的就是在RabbitMQ中如何解决可靠性问题:在前面 在前面说过消息的传递过程中有三个对 ...
- 破解安装pyhotn
1.网址 https://www.jetbrains.com/pycharm/download/#section=windows,打开页面,点击下载专业版 2.这是下载好的文件,双击运行即可. //详 ...
- 手把手教你写hexo博客
市面上现在有各种博客框架,本博客教大家的是Hexo博客框架,目前比较火.搭建博客中遇到各种各样问题,网上方案也比较成熟. 一.搭建环境 安装 git 安装 node.js 安装 Hexo npm in ...
- ArrayList和Vector
ArrayList和Vector ArrayList ArrayList的注意实现 1.ArrayList可以加入null,并且多个 2.ArrayList是由数组来实现数据存储的 3.ArrayLi ...
- UltraSoft - Alpha - 发布声明
DDL_Killer Alpha版本发布声明 1. Alpha 阶段功能描述与版本实现 功能描述 设计原型 Alpha实现 登陆界面 注册界面 首页 日历视图 事项详情页 新建事项 列表视图 课程视图 ...
- BUAA 软件工程个人作业
BUAA 软件工程 个人项目作业 Author: 17373015 乔玺华 教学班级 :005 项目地址:https://github.com/JordenQiao/SE_Homework_Perso ...
- hystrix的dashboard和turbine监控
当我们的应用程序使用了hystrix后,每个具体的hystrixCommand命令执行后都会产生一堆的监控数据,比如:成功数,失败数,超时数以及与之关联的线程池信息等.既然有了这些监控数据数据,那么我 ...