题目链接:点击查看

题目大意:给出 n 个数组成的数组 a ,再给出 q 次询问,每次询问给出一个 m ,要求找到一个 k ,使得 ( k ^ a[ i ] ) 之和小于等于 m 且 k 最大,若不存在输出 - 1

题目分析:首先我们可以按位储存数组 a ,这个第 k 位对于异或的贡献就是 2^k 了,接下来我们可以通过构造一个 k ,使得  ( k ^ a[ i ] ) 之和最小,这样在每次询问时,如果给出的 m 比最小的 ( k ^ a[ i ] ) 之和还要小,那么答案显然就是 - 1 了,否则的话按位从最高位开始贪心就好了,贪心的策略就是当前的位如果放置 1 且加上其余位置异或的贡献依然小于等于 m ,则肯定放 1 ,否则置 0 即可,由于运算过程中可能会爆 long long ,所以可以暂时地将其转换为 __int128 进行运算

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=60;__int128 sum[N+1],cnt[N+1][2];LL solve(__int128 m)
{if(sum[N]>m)return -1;LL ans=0;for(int i=N;i>=0;i--){if((cnt[i][0]<<i)+(i?sum[i-1]:0)<=m){ans|=(1LL<<i);m-=(cnt[i][0]<<i);}elsem-=(cnt[i][1]<<i);}return ans;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int n;scanf("%d",&n);for(int i=1;i<=n;i++){LL num;scanf("%lld",&num);for(int j=0;j<=N;j++)cnt[j][(num>>j)&1]++;}for(int i=0;i<=N;i++){sum[i]=min(cnt[i][0],cnt[i][1])<<i;if(i)sum[i]+=sum[i-1];}int w;cin>>w;while(w--){LL m;scanf("%lld",&m);printf("%lld\n",solve(m));}return 0;
}

牛客 - Final Exam(贪心)相关推荐

  1. 牛客 - 共鸣问题(贪心+思维)

    题目链接:点击查看 题目大意:给出 nnn 个点,每个点都有点权,再给出 mmm 个关系,以 (x,y,z)(x,y,z)(x,y,z) 的形式给出,规定如下: 同时选择点 xxx 和点 yyy 将获 ...

  2. 牛客 - Sixth Sense(贪心+二分)

    题目链接:点击查看 题目大意:给出两个长度为 n 的数列记为 a 和 b,现在 a 的数列固定不动,问如何对数列 b 进行排列,可以使得: b[ i ] > a[ i ] (严格大于)的位置尽可 ...

  3. 牛客 - 树上求和(贪心+树形dp)

    题目链接:点击查看 题目大意:给出一棵树,现在要求给每条边赋上 0 ~ n - 1 的值,且不重复,规定每条路径 ( u , v ) 的权值和为其简单路径上的边权之和,而整棵树的权值和为 所有简单路径 ...

  4. 牛客 - 拿物品(贪心)

    题目链接:点击查看 题目大意:给出 n 个物品,每个物品有两个属性代表价值,有两个玩家依次轮流拿物品,玩家一拿到物品后的贡献为属性一的累加,同理玩家二拿到物品后的贡献为属性二的累加,现在问两人都希望在 ...

  5. 【牛客 - 283E】贪心只能过样例(模拟)

    题干: 小西是单身狗,所以她不喜欢看到有CP在秀恩爱! 有一天,小西出来闲逛,发现街上的行人都排成了一排,并且可以用这种形式表示: MMFMMFFFMMM 其中M表示男孩子,F表示女装的男孩子 小西想 ...

  6. 【牛客每日一题】tokitsukaze and Soldier 题目精讲 贪心、优先队列、堆

    链接:https://ac.nowcoder.com/acm/problem/50439 来源:牛客网 ACM在线模板 今天才发现牛客推出了一个每日一题的版块,3月25号就开始了,今天才发现,赶紧补救 ...

  7. Division 贪心,模拟 牛客练习赛95

    链接:https://ac.nowcoder.com/acm/contest/11185/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言52 ...

  8. 【牛客 - 82B】区间的连续段(贪心,建图,倍增)

    题干: 链接:https://ac.nowcoder.com/acm/contest/82/B 来源:牛客网 给你一个长为n的序列a和一个常数k 有m次询问,每次查询一个区间[l,r]内所有数最少分成 ...

  9. 【牛客 - 551E】CSL 的魔法(贪心,思维,STLmap,分块)

    题干: 链接:https://ac.nowcoder.com/acm/contest/551/E 来源:牛客网 有两个长度为 n 的序列,a0,a1,-,an−1a0,a1,-,an−1和 b0,b1 ...

最新文章

  1. numpy vsplit
  2. IBM也要开源机器学习平台
  3. HTML-通知公告Tips
  4. 生命游戏(game of life)
  5. initramfs 工作原理
  6. java 蓝桥杯算法训练 连续正整数的和(题解)
  7. 运维工程师绩效考核表_企业IT运维存在的五个普遍问题及解决方法
  8. ubuntu命令行打开vscode-insider_在 Linux 中如何从命令行查找 VirtualBox 版本
  9. 使用 Chrome Timeline 来优化页面性能 1
  10. javaIO流-File类及其方法
  11. Windows下PHP环境的搭建
  12. 科学计算机开多次方根号,计算器开多次方怎么操?
  13. 开心网CEO程炳皓称开心微博将一周内对外公测
  14. Qt--QVariant
  15. 胜兵先胜而后求战,败兵先战而后求胜。
  16. Django Xadmin 官方文档 之五 Xadmin 插件制作
  17. flash的计算机知识,初中信息技术FLASH基础知识.ppt
  18. 图解Attention
  19. SAS学习(5)——用于文章投稿的图片导出设置
  20. 实时系统和非实时系统的区别

热门文章

  1. mac 多java环境变量配置_java_Mac安装多个JDK版本并设置环境变量
  2. HashMap中put方法的过程
  3. aop简介-基于jdk的动态代理
  4. 上传图片-服务端-Api接口定义
  5. 用户操作-登录代码实现
  6. 数据库-优化-SQL及索引优化
  7. 内存溢出与内存泄漏区别
  8. SpringBoot AOP拦截器
  9. 第四单元用计算机写作,计算机复习题
  10. 四种π型RC滤波电路