\(\text{Problem}\)

小H是个善于思考的学生,她正在思考一个有关序列的问题。

她的面前浮现出了一个长度为 \(n\) 的序列 \({ai}\),她想找出两个非空的集合 \(S、T\)。

这两个集合要满足以下的条件:

两个集合中的元素都为整数,且都在 \([1, n]\) 里,即 \(Si,Ti ∈ [1, n]\)。

对于集合 \(S\) 中任意一个元素 \(x\),集合 \(T\) 中任意一个元素 \(y\),满足 \(x < y\)。

对于大小分别为 \(p, q\) 的集合 \(S\) 与 \(T\),满足 \(\text{a[s1] xor a[s2] xor a[s3] ... xor a[sp] = a[t1] and a[t2] and a[t3] ... and a[tq]}\).

小H想知道一共有多少对这样的集合 \((S,T)\),你能帮助她吗?

\(\text{Solution}\)

显然 \(dp\)

一般想到的是 \(f_{i,j}\) 表示顺着做到 \(i\) 位异或值为 \(j\) 的方案数,\(g_{i,j}\) 则是倒着 \(and\) 的方案数

那么枚举临界点计算即可

但是由于正解要压位高精,占据空间,是得分着做很悬

于是考虑一个神奇的 \(dp\)

注意它的 \(j\) 表示倒着做 \(and\) 完后继续那这个值 \(xor\) 后的 \(j\)

所以答案是 \(f[p][0][2]\)

\(p\) 表示使用滚动数组最后得到的状态

转移只要考虑当前位选不选即可

\(\text{Code}\)

#include<cstdio>
#include<iostream>
using namespace std; const int N = 1005, P = 1e8;
int n, a[N]; struct node{
int m[40] = {};
}f[2][1024][3]; inline node operator + (node a, node b)
{
node c;
c.m[0] = max(a.m[0], b.m[0]);
for(int i = 1; i <= c.m[0]; i++)
{
c.m[i] += a.m[i] + b.m[i];
c.m[i + 1] += c.m[i] / P, c.m[i] %= P;
}
if (c.m[c.m[0] + 1] > 0) ++c.m[0];
return c;
} int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
f[0][1023][0].m[0] = f[0][1023][0].m[1] = 1;
int p = 0;
for(int i = n; i; i--)
{
for(int j = 0; j < 1024; j++) f[p ^ 1][j][0] = f[p][j][0], f[p ^ 1][j][1] = f[p][j][1],
f[p ^ 1][j][2] = f[p][j][2];
for(int j = 0; j < 1024; j++)
{
f[p ^ 1][j & a[i]][1] = f[p ^ 1][j & a[i]][1] + f[p][j][0] + f[p][j][1];
f[p ^ 1][j ^ a[i]][2] = f[p ^ 1][j ^ a[i]][2] + f[p][j][2] + f[p][j][1];
}
p ^= 1;
}
if (f[p][0][2].m[0] == 0){printf("0\n"); return 0;}
printf("%d", f[p][0][2].m[f[p][0][2].m[0]]);
for(int i = f[p][0][2].m[0] - 1; i; i--) printf("%08d", f[p][0][2].m[i]);
}

JZOJ 3889的更多相关文章

  1. (jzoj snow的追寻)线段树维护树的直径

    jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # ...

  2. [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)

    Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...

  3. [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)

    Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...

  4. [jzoj]5478.【NOIP2017提高组正式赛】列队

    Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子.       前段时间,Sylvia 参加了学校 ...

  5. [jzoj]1115.【HNOI2008】GT考试

    Link https://jzoj.net/senior/#main/show/1115 Description 申准备报名参加GT考试,准考证号为n位数X1X2X3...Xn-1Xn(0<=X ...

  6. [jzoj]2538.【NOIP2009TG】Hankson 的趣味题

    Link https://jzoj.net/senior/#main/show/2538 Description Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫H ...

  7. [jzoj]4216.【NOIP2015模拟9.12】平方和

    Link https://jzoj.net/senior/#main/show/4216 Description 给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X, ...

  8. [jzoj]2938.【NOIP2012模拟8.9】分割田地

    Link https://jzoj.net/senior/#main/show/2938 Description 地主某君有一块由2×n个栅格组成的土地,有k个儿子,现在地主快要终老了,要把这些土地分 ...

  9. [jzoj]2505.【NOIP2011模拟7.29】藤原妹红

    Link https://jzoj.net/senior/#main/show/2505 Description 在幻想乡,藤原妹红是拥有不老不死能力的人类.虽然不喜欢与人们交流,妹红仍然保护着误入迷 ...

  10. [jzoj]3875.【NOIP2014八校联考第4场第2试10.20】星球联盟(alliance)

    Link https://jzoj.net/senior/#main/show/3875 Problem 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流. ...

随机推荐

  1. QMetaObject::connectSlotsByName: No matching signal for xxx

    问题描述 这个问题是没有与 xxx 这个槽函数匹配的信号,但是我做了 QMetaObject::connectSlotsByName(this);, 自动连接.并且确保了函数名和信号名是没有错误的,还 ...

  2. 浏览器直接修改网站的js代码

    1.按下F12打开控制台,找到源代码,然后是替换 2.在本地创建一个文件夹,会提示风险,点击允许 3.再找到你要修改的js文件代码,右击选择保存并覆盖 这样代码会保存到你刚刚创建的本地文件夹当中,接着 ...

  3. Docker定时删除none镜像

    在使用docker的时候会产生none镜像文件,偶尔没什么,但是比如使用了自动化部署工具那就不一样了,一天没准就上百个none镜像了,非常消耗资源,所以需要定时清理 删除 none 镜像命令 dock ...

  4. python2和python3的区别(1)

    1.python2和python3的解释器的默认编码不同 python2解释器的编码默认用的是 ascii python3解释器的编码默认用的 utf-8 2.python2和python3输入的表示 ...

  5. 出现报错:The field admin.LogEntry.user was declared with a lazy reference to 'api.user', but app 'api' isn't installed.解决方法

  6. Win10系统安装U盘,安装纯净版Win10的通用教程

    安装前准备:1.准备8G或8G以上U盘(32G以内).2.制作U盘会格式化U盘,U盘内的重要文件也要事先备份好.操作步骤:1.打开微软下载WIN10网址:(如果网址无法打开,可以下载解压运行附件内的工 ...

  7. 云知声: 基于 JuiceFS 的超算平台存储实践

    云知声从一家专注于语音及语言处理的技术公司,现在技术栈已经发展到具备图像.自然语言处理.信号等全栈式的 AI 能力,是国内头部人工智能独角兽企业.公司拥抱云计算,在智慧医疗.智慧酒店.智慧教育等方面都 ...

  8. django中只使用ModleForm的表单验证,而不使用ModleForm来渲染

    主题 众所周知,django.forms极其强大,不少的框架也借鉴了这个模式,如Scrapy.在表单验证时,django.forms是一绝,也是面向对象的经典表现.但要用它来渲染表单那就不好玩了,除非 ...

  9. 【转载】VFP编写DLL,并调用

    1. 编制DLL文件 ,保存为Temp.prg Define Class vfptools As Session OlePublic    Procedure Add As Integer    Lp ...

  10. WCH沁恒 CH37系列芯片选型以及常见问题的处理(CH376/CH378)

    选型 型号 接口 功能 备注 电源 CH372 并口 USB_Device 全速 USB 设备接口,兼容 USB V2.0 3.1-3.6 4.2-5.4 CH374 SPI/并口 Host/Devi ...