题目传送门

题目大意

见题面。

思路

本来以为zcx、pxj变强了,后来发现是SPJ出问题了。。。考试的时候感觉有点人均啊。。。结果自己还是只想出来一半。

我们假设 \(f(x)=(\lfloor\frac{2x}{2^n}\rfloor+2x)\pmod{2^n}\),那么我们可以看出 \(f(x)\) 实际上就是 \(x\) 把第一位提到最后一位,那么我们就可以想到 \(f(a\otimes b)=f(a)\otimes f(b)\)(虽然我考试的时候就是这里没有想到)。

考虑原问题,我们不难看出,答案就是:

\[\max_{x=0}^{2^n-1}\{\min_{i=0}^{m}f(x\otimes\text{pre}(i))\otimes \text{suf}(i+1)\}
\]
\[=\max_{x=0}^{2^n-1}\{\min_{i=0}^{m}f(x)\otimes f(\text{pre}(i))\otimes \text{suf}(i+1)\}
\]

然后我们把 \(f(\text{pre}(i))\otimes \text{suf}(i+1)\) 放到 trie 树上面跑 dfs 就好了。

时间复杂度 \(\Theta(nm)\) 。

\(\texttt{Code}\)

#include <bits/stdc++.h>
using namespace std; #define Int register int
#define MAXN 100005 template <typename T> inline void read (T &t){t = 0;char c = getchar();int f = 1;while (c < '0' || c > '9'){if (c == '-') f = -f;c = getchar();}while (c >= '0' && c <= '9'){t = (t << 3) + (t << 1) + c - '0';c = getchar();} t *= f;}
template <typename T,typename ... Args> inline void read (T &t,Args&... args){read (t);read (args...);}
template <typename T> inline void write (T x){if (x < 0){x = -x;putchar ('-');}if (x > 9) write (x / 10);putchar (x % 10 + '0');} int n,m,a[MAXN],suf[MAXN],pre[MAXN]; int f (int x){return (x * 2 + (x * 2) / (1 << n)) % (1 << n);} int cnt = 1,ch[MAXN * 30][2]; void ins (int x){
int now = 1;
for (Int i = n - 1;~i;-- i){
int k = x >> i & 1;
if (!ch[now][k]) ch[now][k] = ++ cnt;
now = ch[now][k];
}
} int dp[MAXN * 30]; int dfs (int now,int len){
if (len < 0) return 0;
if (dp[now]) return dp[now];
int res = 0;
if (!ch[now][1] && ch[now][0]) res = dfs (ch[now][0],len - 1) + (1 << len);
else if (!ch[now][0] && ch[now][1]) res = dfs (ch[now][1],len - 1) + (1 << len);
else{
res = max (res,dfs (ch[now][0],len - 1));
res = max (res,dfs (ch[now][1],len - 1));
}
return dp[now] = res;
} int query (int now,int len,int s){
if (len < 0) return 0;
int k = s >> len & 1;
if (ch[now][k]) return query (ch[now][k],len - 1,s);
else return query (ch[now][!k],len - 1,s) + (1 << len);
} unordered_map <int,bool> vis; signed main(){
read (n,m);
for (Int i = 1;i <= m;++ i) read (a[i]),pre[i] = pre[i - 1] ^ f (a[i]);
for (Int i = m;i >= 1;-- i) suf[i] = suf[i + 1] ^ a[i];
for (Int i = 0;i <= m;++ i) ins (pre[i] ^ suf[i + 1]);
int ans = dfs (1,n - 1),res = 0;
for (Int i = 0;i <= m;++ i){
int stx = ans ^ pre[i] ^ suf[i + 1];
if (!vis[stx] && query (1,n - 1,stx) == ans) vis[stx] = 1,res ++;
}
write (ans),putchar ('\n'),write (res),putchar ('\n');
return 0;
}

题解 2020.10.24 考试 T2 选数的更多相关文章

  1. 题解 2020.10.24 考试 T3 数列

    题目传送门 题目大意 给出一个数 \(n\),你要构造一个数列,满足里面每个数都是 \(n\) 的因子,且每一个数与前面不互质的个数不超过 \(1\).问有多少种合法方案. 保证 \(n\) 的不同质 ...

  2. 题解 2020.10.24 考试 T4 模板

    题目传送门 题目大意 有一个 \(n\) 个点组成的树,有 \(m\) 次操作,每次将 \(1\to x\) 的路径上每个点都加入一个颜色为 \(c\) 的小球.但是每个点都有大小限制,即小球个数超过 ...

  3. 10.24考试题解qwq

    考点难度都很合适的一套题目,大概在day1到day2之前 T1 猴猴最喜欢在树上玩耍,一天猴猴又跳上了一棵树,这棵树有N个苹果,每个苹果有一个编号,分别为0~N-1,它们之间由N-1个树枝相连,猴猴可 ...

  4. 题解【2.23考试T2】str

    2. str [题目描述] 这是一道传统题,源代码的文件名为 str.cpp/c/pas. 构造 n 个 01 字符串 S1...Sn,使得对于任意 i≠j,Si 不是 Sj 的前缀.在最小化串长和的 ...

  5. 2020.10.24【普及组】模拟赛C组 总结

    T1:暴力 1:先从 6 个中选三个,再把选出的三个全排列,全排列后再判断是否可行 2:把 6 个全都全排列,然后判断 T2:判断误差 1:减法时结果加上 1e-8 2:把小数乘上 1e6 左右 考试 ...

  6. 2020.10.17 JZOJ 提高B组T2 导弹拦截

    2020.10.17 JZOJ 提高B组T2 导弹拦截 题目 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统. 敌国的导弹形成了立体打击,每个导弹可以抽象成一个三维空间中的 ...

  7. luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数)

    luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数) Luogu 题外话: LN切这题的人比切T1的多. 我都想到了组合意义乱搞也想到可能用斯特林数为啥还是没做出来... 我怕 ...

  8. luoguP1036 选数 暴力AC题解

    luoguP1036 选数 暴力AC题解(非正解) 俗话说得好:暴力出奇迹,打表拿省一. 对于一些暴力就能拿分的题,暴力就好啦QWQ 题目描述   输入格式 输出格式 输入输出样例 定义变量 我们令输 ...

  9. NOIP2018赛前停课集训记(10.24~11.08)

    前言 为了不久之后的\(NOIP2018\),我们的停课从今天(\(Oct\ 24th\))起正式开始了. 本来说要下周开始的,没想到竟提早了几天,真是一个惊喜.毕竟明天有语文考试.后天有科学考试,逃 ...

随机推荐

  1. IP掩码的作用

    IP地址&IP掩码==网段,即,与上掩码后相同的IP属于同一网段.

  2. 小程序 mpvue page "xxx" has not been registered yet

    新增了几个页面,改了下目录结构,就开始报这个错. 重启了几次不管用,google 一番也无果. 灵机一动试一下 build npm run build build 版本没报错,OK 然后 $ rm - ...

  3. Java链表练习题小结

    链表 链表(Linked List)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).一个链表节点至少包含一个 数据域和 ...

  4. python模块--pathlib

    类/属性/方法 返回值 参数 说明 .Path() p 创建Path对象 path 路径         p.parent Path 返回上一级路径 p.parents iter 上一级路径, 上上级 ...

  5. [Apache Atlas] Atlas 架构设计及源代码简单分析

    Apache Atlas 架构图 Atlas 支持多数据源接入:Hive.HBase.Storm等 Type System Type Atlas 中定义了一些元数据类型 ── AtlasBaseTyp ...

  6. POJ2352 Stars (静态二叉检索树)

    https://vjudge.net/problem/POJ-2352 分析: 由于是按照y坐标的升序,y坐标向等的按x的升序的顺序给出星星.那么某个星星的等级数就是在他前面x坐标小于等于他的x坐标的 ...

  7. tp5 引入 没有命名空间的类库的方法(以微信支付SDK为例)

    use think\Loader; Loader::import('Wxpay.WxPay',EXTEND_PATH,'.Api.php'); 注意扩展名的点"."不能省略 使用之 ...

  8. 创建一个 Orchard Core CMS 站点

    本文通过引用项目模板的方式创建Orchard CMS站点. 创建项目有不同的方式可以为Orchard Core创建站点和模块.你可以在这里了解更多关于它们的信息.在本指南中,我们将使用我们的" ...

  9. Docker系列(12)- 部署Tomcat

    #官方的使用:我们之前的启动都是后台,停止容器后,容器还是可以看到#docker run -it --rm,一般用来测试,用完就会删除容器,镜像还在[root@localhost ~]# docker ...

  10. 自制Chrome扩展插件:用于重定向js

    前言 作为一个前端开发, 在调试生产环境的代码时,是否苦于生产环境代码被压缩,没有sourcemap? 有没有想过将生产环境的js直接重定向为本地开发环境的js? 玩微前端时,有没有想过用本地的子应用 ...