Codeforces 1847 A-F
题面
题解
B
题目大意:找到一组分割方法,使得 \(\sum _{i=1} ^ k (\text{&} _{j=l_i} ^ {r_i} a_j)\) 取得最小值时使 \(k\) 最大,输出 \(k\)。其中 \(\text{&}\) 表示按位与操作。
题目分析:
| & | 0 | 1 |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
不难发现,因为 \(a \in \mathbb{N}\),所以 $$a, b \ge a \& b \tag{1}$$ $$a + b \ge a \& b \tag{2}$$且对于公式 (2),当且仅当 \(a=b=0\) 时取等。
因此考虑贪心。设 \(x = \text{&} _{i=1} ^ {n} a_i\)。对于 \(x > 0\) 的 情况,根据 (2),分成一组的和是最优的,因此 \(k = 1\);对于 \(x = 0\) 的情况,只要将原数组分为几段区间按位与都为 \(0\) 的区间即可。
代码略。
C
题目大意:对于数组 \(a\),它的前 \(n\) 个数由题目给定,而 \(a_i(i > n) = \oplus _{j=k} ^ {i-1} a_j\),其中 \(k\) 不确定,\(1 \le k \le i - 1\),而 \(\oplus\) 表示按位异或。求 \(a\) 中元素的最大可能值。
这套题怎么这么多位运算?
题目分析:
| \(\oplus\) | 0 | 1 |
|---|---|---|
| 0 | 0 | 1 |
| 1 | 1 | 0 |
题目给定 \(a_i < 2^8 (1\le i\le n)\),所以由按位与的定义得到全体 \(a_i < 2^8\)。
设 \(a_p = \oplus _{i=l} ^{p-1} a_i\),则 \(a_{p+1}=\oplus _{i=k} ^{p} a_i=(\oplus _{i=k} ^{p-1} a_i) \oplus a_p = (\oplus _{i=k} ^{p-1} a_i) \oplus (\oplus _{i=l} ^{p-1} a_i) = \oplus _{i=min(k, l)} ^{max(k, l)-1} a_i\)。
于是问题转化为求最大字段异或。又因为异或运算满足结合律,可以用前缀异或加速。
问题再次转化为:求前缀异或数组中,任意两数异或的最大值。
由于 \(a_i < 2^8\),所以前缀异或数组中元素的值也在这个值域内。因此考虑用桶记录前缀数组中的数,然后与前缀数组进行“配对”求异或值。时间复杂度 \(O(2^8 \times n)\),可以通过这道题。
#include <bits/stdc++.h>
using namespace std;
int t, n, a[100010];
bool x[100010];
int main() {
scanf("%d", &t);
while (t--) {
memset(x, 0, sizeof(x));
scanf("%d", &n);
int ans = 0;
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
a[i] ^= a[i - 1];
x[a[i]] = 1;
ans = max(ans, a[i]);
}
for (int i = 1; i <= n; i++) {
for (int j = 0; j < 256; j++) {
if (x[j]) {
ans = max(ans, a[i] ^ j);
}
}
}
printf("%d\n", ans);
}
return 0;
}
D
从这里开始难度陡增。
(未完)
Codeforces 1847 A-F的更多相关文章
- Codeforces #541 (Div2) - F. Asya And Kittens(并查集+链表)
Problem Codeforces #541 (Div2) - F. Asya And Kittens Time Limit: 2000 mSec Problem Description Inp ...
- Educational Codeforces Round 40 F. Runner's Problem
Educational Codeforces Round 40 F. Runner's Problem 题意: 给一个$ 3 * m \(的矩阵,问从\)(2,1)$ 出发 走到 \((2,m)\) ...
- codeforces Gym 100187F F - Doomsday 区间覆盖贪心
F. Doomsday Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/F ...
- Codeforces gym 100685 F. Flood bfs
F. FloodTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100685/problem/F Desc ...
- Codeforces Gym 100513F F. Ilya Muromets 线段树
F. Ilya Muromets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/probl ...
- Educational Codeforces Round 61 F 思维 + 区间dp
https://codeforces.com/contest/1132/problem/F 思维 + 区间dp 题意 给一个长度为n的字符串(<=500),每次选择消去字符,连续相同的字符可以同 ...
- Educational Codeforces Round 51 F. The Shortest Statement(lca+最短路)
https://codeforces.com/contest/1051/problem/F 题意 给一个带权联通无向图,n个点,m条边,q个询问,询问两点之间的最短路 其中 m-n<=20,1& ...
- Codeforces Gym 100513F F. Ilya Muromets 水题
F. Ilya Muromets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/probl ...
- Educational Codeforces Round 12 F. Four Divisors 求小于x的素数个数(待解决)
F. Four Divisors 题目连接: http://www.codeforces.com/contest/665/problem/F Description If an integer a i ...
- [codeforces/edu5]总结(F)
链接:http://codeforces.com/contest/616 A题: 统一成1e6长度的字符串,右对齐比较字典序. B题: 求所有行的最小值,里面最大的那个.暴力. C题: 先用dfs给每 ...
随机推荐
- Ubuntu20.04安装CUDA和CUDNN
CUDA是GPU深度学习的运行库,那么cuDNN就是训练加速工具,两者要相互配合使用,所以一般机器学习需要训练引擎(tensorflow-gpu) + CUDA + cuDNN使用.想不安装cuDNN ...
- Ubuntu16.04使用命令行安装jdk1.8
在Ubuntu中安装jdk过于麻烦,有时设置不好可能就没有办法使用,卸载也难以卸载干净,所以这篇文章使用相对简单的命令行来安装jdk,只需简单的四个命令,省去许多麻烦,下面是方法. 进入Ubuntu打 ...
- Windows SSH 免密登陆远程计算机
上传公钥 如果远程计算机是类 Unix 系统,使用下面这条命令: Get-Content $Env:USERPROFILE\.ssh\id_rsa.pub | ssh USER@HOST " ...
- Kubernetes-14:持久化存储PV、PVC和StatefulSet介绍及使用
PV.PVC简介 PersistentVolume(PV) 是由管理员设置的存储,它是集群的一部分,就像节点是集群中的资源一样,PV也是集群中的资源.PV是Volume之类的卷插件,但具有独立于使用P ...
- 图文教程:从0到1将项目发布到 Maven 中央仓库
前言 本文基于官方文档 https://central.sonatype.org/publish/publish-guide/ 编写. 发布步骤: 创建账号 创建用户 Token 创建命名空间 配置 ...
- 扩展KMP (ex_KMP)
一些约定: 字符串下标从1开始 s[1,i]表示S的第一个到第i个字符组成的字符串 解决的题型: 给你两个字符串A,B(A.size()=n,B.size()=m),求p数组 p[i]表示最大的len ...
- C#自定义控件—文本显示、文本设值
C#用户控件之文本显示.设定组件 如何绘制一个便捷的文本显示组件.文本设值组件(TextShow,TextSet)? 绘制此控件的目的就是方便一键搞定标签显示(可自定义方法显示文本颜色等),方便自定义 ...
- JavaScript 中 structuredClone 和 JSON.parse(JSON.stringify()) 克隆对象的区别
JavaScript 中 structuredClone 和 JSON.parse(JSON.stringify()) 克隆对象的异同点 一.什么是 structuredClone? 1. struc ...
- 原生JavaScript实现可旋转立方体效果基础示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java以封装对象的方式读取CSV文件存储数据库
依赖 <!-- https://mvnrepository.com/artifact/net.sourceforge.javacsv/javacsv --> <dependency& ...