2019-2020 10th BSUIR Open Programming Championship. Semifinal
2019-2020 10th BSUIR Open Programming Championship. Semifinal
GYM链接https://codeforces.com/gym/103637
K
题意:
给定\(n\)个二进制下不超过\(m\)位的数,找到一个二进制下不超过\(m\)位且至多有\(k\)个\(1\)的最小的数\(X\),使得最大化\(\sum_{i=1}^nmax(a_i,a_i\)^\(X\)).
思路:
赛时看到本题的第一想法是贪心。从高位到低位,依次统计每一位的0和1的数量,然后最大化收益决定此位是0还是1。但思考后发现这显然不成立,虽然对于此位置独立收益最大,但根本没有考虑得到的\(X\)和每个数异或后是原来的数大还是异或后的数大。
本题正确的思路应是这样:考虑到\(k\)的取值最大只有30,我们可以进行暴力枚举。初始我们令初始答案为\(0\),至多只能有\(k\)个数从\(0\)变成\(1\),我们可以计算出在当前答案下的\(\sum_{i=1}^nmax(a_i,a_i\)^\(X\)) 的值,然后从低到高枚举哪一位可以从\(0\)变成\(1\),设第\(q\)位可以从\(0\)变成\(1\),那么\(q\)就等于在取得:
\(\max_{0 \leq j <m} \left\{\begin{matrix}\sum_{i=1}^n max(a_i,a_i xorX)<\sum_{i=1}^nmax(a_i,a_ixor(X+(1<<j)))\end{matrix}\right\}\)下的\(j\)。
如果一次循环完没有一位可以满足要求,那就表示当前的答案已经是最终答案,输出即可。时间复杂度\(O(kmn)\)。
代码:
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ywh666 std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define all(a) a.begin(),a.end()
typedef long long ll ;
int main(){
ywh666;
ll n, m, k;
cin >> n >> m >> k ;
vector<ll> a(n);
for(int i = 0 ; i < n ; i ++) {
cin >> a[i];
}
ll ans = 0 ;
for(int i = 0 ; i < k ; i ++){
ll sum = 0 ;
ll f = -1 ;
for(int j = 0 ; j < n ; j ++){
sum += max(a[j], a[j] ^ ans);
}
for(int j = 0 ; j < m ; j ++){
if(ans & (1ll << j)) continue;
ll cnt = 0;
for(int k = 0 ; k < n ; k ++){
cnt += max(a[k], a[k] ^ (ans + (1ll << j)));
}
if(cnt > sum){
f = j;
sum = cnt;
}
}
if(f != -1){
ans += (1ll << f);
}else{
break;
}
}
cout << ans << endl;
}
2019-2020 10th BSUIR Open Programming Championship. Semifinal的更多相关文章
- Ural Sport Programming Championship 2015
Ural Sport Programming Championship 2015 A - The First Day at School 题目描述:给出课程安排,打印一个课程表. solution 暴 ...
- 计蒜客 39272.Tree-树链剖分(点权)+带修改区间异或和 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest E.) 2019ICPC西安邀请赛现场赛重现赛
Tree Ming and Hong are playing a simple game called nim game. They have nn piles of stones numbered ...
- 2019 The 19th Zhejiang University Programming Contest
感想: 今天三个人的状态比昨天计院校赛的状态要好很多,然而三个人都慢热体质导致签到题wa了很多发.最后虽然跟大家题数一样(6题),然而输在罚时. 只能说,水题还是刷得少,看到签到都没灵感实在不应该. ...
- C.0689-The 2019 ICPC China Shaanxi Provincial Programming Contest
We call a string as a 0689-string if this string only consists of digits '0', '6', '8' and '9'. Give ...
- B.Grid with Arrows-The 2019 ICPC China Shaanxi Provincial Programming Contest
BaoBao has just found a grid with $n$ rows and $m$ columns in his left pocket, where the cell in the ...
- 计蒜客 39280.Travel-二分+最短路dijkstra-二分过程中保存结果,因为二分完最后的不一定是结果 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest M.) 2019ICPC西安邀请赛现场赛重现赛
Travel There are nn planets in the MOT galaxy, and each planet has a unique number from 1 \sim n1∼n. ...
- 计蒜客 39279.Swap-打表找规律 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest L.) 2019ICPC西安邀请赛现场赛重现赛
Swap There is a sequence of numbers of length nn, and each number in the sequence is different. Ther ...
- 计蒜客 39270.Angel's Journey-简单的计算几何 ((The 2019 ACM-ICPC China Shannxi Provincial Programming Contest C.) 2019ICPC西安邀请赛现场赛重现赛
Angel's Journey “Miyane!” This day Hana asks Miyako for help again. Hana plays the part of angel on ...
- 计蒜客 39268.Tasks-签到 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest A.) 2019ICPC西安邀请赛现场赛重现赛
Tasks It's too late now, but you still have too much work to do. There are nn tasks on your list. Th ...
随机推荐
- async-validator 源码学习笔记(二):目录结构
上一篇文章<async-validator 源码学习(一):文档翻译>已经将 async-validator 校验库的文档翻译为中文,看着文档可以使用 async-validator 异步 ...
- 分布式 PostgreSQL 集群(Citus),官方快速入门教程
多租户应用程序 在本教程中,我们将使用示例广告分析数据集来演示如何使用 Citus 来支持您的多租户应用程序. 注意 本教程假设您已经安装并运行了 Citus. 如果您没有运行 Citus,则可以使用 ...
- Flask 之 WebSocket
http:是一个协议 规定:数据传输格式 -/r/n/r/n 一次的请求,一次的响应,断开了 短链接 无状态 服务器收到的请求,做出的响应给客户端 客户端主动向服务器发起请求 基于socket sen ...
- Monkey的参数及简单使用
什么是Monkey? Monkey是Android SDK提供的一个命令行工具,可以简单方便的发送伪随机的用户事件流,对Android APP做压力(稳定性)测试.主要是为了测试app是否存在无响应和 ...
- [SPDK/NVMe存储技术分析]001 - SPDK/NVMe概述
1. NVMe概述 NVMe是一个针对基于PCIe的固态硬盘的高性能的.可扩展的主机控制器接口. NVMe的显著特征是提供多个队列来处理I/O命令.单个NVMe设备支持多达64K个I/O 队列,每个I ...
- 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以有多个类,但只能有一个public的类,并且public的类名必须与文件的主文件名相同. 包含多个类的Java源文件编译之后会生成多个.class文件.
- kafka消费组创建和删除原理
0.10.0.0版本的kafka的消费者和消费组已经不在zk上注册节点了,那么消费组是以什么形式存在的呢? 1 入口 看下kafka自带的脚本kafka-consumer-groups.sh,可见脚本 ...
- mybatis插件机制原理
mybatis插件机制及分页插件原理 参考链接:mybatis插件机制及分页插件原理 如何编写一个自定义mybatis插件 参考链接:mybatis 自定义插件的使用
- 客户端注册 Watcher 实现 ?
1.调用 getData()/getChildren()/exist()三个 API,传入 Watcher 对象 2.标记请求 request,封装 Watcher 到 WatchRegistrati ...
- OOP 中的 组合、聚合和关联有什么区别?
如果两个对象彼此有关系,就说他们是彼此相关联的.组合和聚合是面向对象中 的两种形式的关联.组合是一种比聚合更强力的关联.组合中,一个对象是另一 个的拥有者,而聚合则是指一个对象使用另一个对象.如果对象 ...