xj膜你赛27

news/2024/7/4 8:18:01 标签: 数据结构与算法

凯旋而归

\(n\) 个数,第 \(i\) 个数为 \(a_i\) 。对于一个由 \(n\) 个数组成的序列 \(a\) ,定义它的帅气值\[f(a)=max\{(a_1xora_2xor...xora_i)+(a_{i+1}xora_{i+2}xor...xora_n)\}\]
现在给出 \(n\) 个数组成的序列 \(a\) ,求计算 \(a\) 的每个前缀的帅气值。

样例

5
1 2 3 4 5

1
3
6
10
9

数据范围

\(n\le 456789,0\le a_i\le 10^6\)

分析

首先 \(a_i\) 不是很大,所以考虑到可以装桶。
我们假设已经处理出了序列 \(a\) 的前缀异或和序列 \(x\)
对于一个 \(x_i\) ,我们先把 \(x_r(1\le r<i)\) 装桶,具体方法是将 \(x_r\) 的每一个含 \(1\) 的子序列都装桶,如 \(x_r=1010\) (二进制),则将 \(1010,1000,0010\) 装桶。装桶使用dfs+剪枝,否则会 \(\text{Time Limit Exceeded}\) 飞掉。
然后我们设法把当前的前缀异或和 \(x_i\) 拆成两个前面已出现过的异或和,然后统计答案帅气值。
按位枚举 \(x_i\) ,在第 \(j\) 位上,若 \(x_{i,j}=1\) ,则答案的第 \(j\) 位必为 \(1\)
\(x_{i,j}=0\) 那么分出的两个异或和第 \(j\) 位要么都是 \(1\) 要么都是 \(0\) ,此时我们需要一个 \(now\) 变量,若 \(now\) 的某一位为 \(1\) ,则表明分出的两个异或和的的这一位都为 \(1\), 否则那一位为 \(0\) ,我们判断当前的 \(now\) 是否在桶中出现过,若出现过,两个异或和第 \(j\) 位就是 \(1\) ,否则是 \(0\)
假设我们有这么一些数:
1001
0010
1010
1001
1000
程序执行步骤:
1.检查1001
当前桶中元素:空

位数\(now\)\(ans\)
100001000
200001000
300001000
400001001

2.1001,1000,0001装桶
3.检查1011
当前桶中元素:1001,1000,0001

位数\(now\)\(ans\)
100001000
200001000
300001010
400001011

4.1011,1001,1010,0011,1000,0010,0001装桶
5.检查0001
当前桶中元素:1011,1010,1001,1000,0011,0010,0001

位数\(now\)\(ans\)
1100010000
2100010000
3101010100
4101010101

6.0001装桶
7.检查1000
当前桶中元素:1011,1010,1001,1000,0011,0010,0001

位数\(now\)\(ans\)
100001000
200001000
300101100
400111110

8.1000装桶
9.检查0000
当前桶中元素:1011,1010,1001,1000,0011,0010,0001

位数\(now\)\(ans\)
1100010000
2100010000
3101010100
4101110110

10.1000装桶
输出结果:
9
11
21
14
22

Code

#include<cstdio>
#define maxn 456795
#define get(x,pos) bool((x)&(1<<(pos))) 
using namespace std;
int read(){
    char c=getchar();
    int x=0;
    while(c<'0'||c>'9')c=getchar();
    while(c>='0'&&c<='9'){
        x=(x<<3)+(x<<1)+c-'0';
        c=getchar();
    }
    return x;
}
void write(int x){
    if(x>=10)write(x/10);
    putchar(x%10+'0');
}
int b[1050000];
void add(int x){
    if(b[x])return;
    b[x]=1;
    for(int i=20;i>=0;i--){
        if(get(x,i)){
            add(x-(1<<i));
        }
    }
}
int query(int x){
    int now=0,ret=0;
    for(int i=20;i>=0;i--){
        if(get(x,i))ret|=1<<i;
        else if(b[now|(1<<i)]){
            now|=1<<i;
            ret+=1<<(i+1);
        }
    }
    return ret;
}
int main(){
    int n=read(),a,x=0;
    for(int i=1;i<=n;i++){
        a=read();
        x^=a;
        write(query(x));
        putchar('\n');
        add(x);
    }
    return 0;
}

转载于:https://www.cnblogs.com/BlogOfchc1234567890/p/9917211.html


http://www.niftyadmin.cn/n/658016.html

相关文章

Qt中QString、QByteArray、int、double之间转换

Qt中QString、QByteArray、int、double之间转换 最近写Qt中的tcp网络编程&#xff0c;Socke连接后&#xff0c;接受到的数据类型是字节型&#xff0c;这就涉及到了大量的类型转换&#xff0c;在网上辗转几辄&#xff0c;总算有了点结果&#xff0c;特此跟大家分享。好了&#x…

用Java实现代码编辑器的下拉补全效果

效果 主要类(继承JTextArea监听输入,使用JComboBox显示下拉) 可以手动添加候选信息或&#xff0c;使用配置文件&#xff0c;读取配置文件 public class AutoCompleteTextArea extends JTextArea implements AutoCompleteListener {private Map<String,TipInfo> map;pr…

美国男子麦当劳快餐吃出死老鼠 索赔170万美元

【来源&#xff1a;中国新闻网】 【作者&#xff1a;钟岩】 美国得克萨斯州一名男子26日向联邦地方法院起诉麦当劳&#xff0c;其原因是他与家人在麦当劳的外带快餐里发现一只死老鼠。   美国达拉斯早晨新闻报道说&#xff0c;这位名为托德-哈利的男子向麦当劳索赔170万美元…

background-size css background-images

在设计网页时&#xff0c;经常会用到背景图片来达到视觉效果。 一般情况下用repeat的方式是最适全不过了&#xff0c;不过有时间是采用整图来充当背景&#xff0c;那么这个时候就会有多种可能性的存在了。 整图来做背景一般是采用no-repeat来实现的&#xff0c;但是屏幕大小是比…

WPF下递归生成树形数据绑定到TreeView上(转)

WPF下递归生成树形数据绑定到TreeView上 最终效果图&#xff1a;&#xff08;用于学习类的效果 图片丑了点&#xff0c;看官莫怪&#xff09; 新建窗体 然后在前端适当位置插入如下代码&#xff1a; <TreeView x:Name"departmentTree" Height"500" Wid…

使用JTextArea的游戏测试

效果 核心类(主要是使用char[][]存储显示信息,StringBuilder用于拼接信息在JTextArea上显示) public class MyTextPanel extends JTextArea implements MyListener,Runnable, Input {//宽 88 高 29private StringBuilder builder;private char[][] map;private int updateT…

Jersey 2.x 服务器端应用支持的容器

基于 JAX-RS Servlet-based 部署的一部分标准&#xff0c;能运行在任何支持 Servlet 2.5 和更高标准的的容器上。Jersey 提供支持程序化部署在下面的容器中&#xff1a;Grizzly 2 &#xff08;HTTP 和 Servlet&#xff09;&#xff0c; JDK Http server&#xff0c;Simple Http…

一个用xml存储日志信息的程序

本程序中利用asp代码生成的日志信息存储到xml文件中&#xff0c;然后由xslt格式化输出 该程序共分三个部分:1. 生成日志的asp程序 代码见以前的一篇文章&#xff1a; http://blog.csdn.net/precipitant/archive/2005/04/28/366634.aspx 2. 由 上面的 程序 生成的日志文…