CodeForces 1457D XOR-gun

题目大意:

给定一个长度为 nnn 的非递减数组,你每次操作可以选择两个相邻的数异或代替原来的数,数组长度减一,问最少需要多少次才能让数组不再递减,无答案输出 −1-1−1.

思路:

想了很久,就只想到两个相邻的数最高位相同的话,异或肯定是会变少的,但没想全,最后看题解才发现游三个最高位一样,肯定操作一次就可以了,所以这个数组长度不能超过 606060 ,超过了答案一定是 111 。为什么是 606060 呢,因为第一位最高可以有 222 个,第三十位最高可以有 222 个,所以就是 606060 。那小于等于 606060 的就直接完全暴力,从位置 iii 开始,前面 jjj 个异或, 后面 kkk 个异或,相比较取最小即可

代码:

#include <bits/stdc++.h>
using namespace std;
#define me(a, b) memset(a, b, sizeof(a))
#define IOS() ios::sync_with_stdio(false), cin.tie(0)
#define endl '\n'typedef long long ll;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const int maxn = 2e5 + 5;
const ll mod = 1e9 + 7;int a[maxn];
int b[maxn];int main()
{IOS();int n;cin >> n;for(int i = 1; i <= n; ++i) {cin >> a[i];b[i] = b[i-1] ^ a[i];}int ans = INF;if(n > 60)ans = 1;else {for(int i = 1; i < n; ++i) {int x = 0;for(int j = 0; j < i; ++j) {int y = 0;x ^= a[i-j];for(int k = 0; i+1+k <= n; ++k) {y ^= a[i+1+k];if(x > y)ans = min(ans, j+k);}}}}if(ans == INF)cout << -1 << endl;else cout << ans << endl;return 0;
}

总结:

位运算总是这么巧妙,头皮都想破了,哎。。。

CodeForces 1457D XOR-gun相关推荐

  1. Codeforces 617E XOR and Favorite Number

    Discription Bob has a favorite number k and ai of length n. Now he asks you to answer m queries. Eac ...

  2. CodeForces - 1457D XOR-gun(位运算+暴力)

    题目链接:点击查看 题目大意:给出一个长度为 n 的非降序列,现在可以执行数次操作:选择相邻的两个位置将其替换成异或和,更具体的,每次操作可以选择一个位置 i ,满足 1 <= i < n ...

  3. CodeForces - 617E XOR and Favorite Number (莫队+前缀和)

    Bob has a favorite number k and ai of length n. Now he asks you to answer m queries. Each query is g ...

  4. codeforces 617E XOR and Favorite Number 莫队

    https://vjudge.net/problem/CodeForces-617E 题目大意:给nnn个数,mmm个询问,以及一个数kkk,每次询问要输出[l,r][l,r][l,r]内满足a[i] ...

  5. CodeForces -617E XOR and Favorite Number(莫队)

    题目链接:点击这里 题目大意: 给定一个长度为 nnn 的序列 a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​ ,再给出一个数字 kkk , mmm 组询问每组询 ...

  6. codeforces 242E XOR on Segment

    E. XOR on Segment time limit per test 4 seconds memory limit per test 256 megabytes input standard i ...

  7. CodeForces - 1417E XOR Inverse(字典树求逆序对+分治)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a,现在要求选出一个 x,将 a 中的每个元素都异或之后得到一个新的数列 b,要求数列 b 的逆序对最小,问最小的逆序对是多少,x 该如何选择 ...

  8. CodeForces - 617E XOR and Favorite Number(莫队)

    题目链接:点击查看 题目大意:给出一个由n个数组成的数列,现在给出m组询问,每次询问包含一个l和一个r,要求回答在闭区间[l,r]中有多少组(i,j)满足[i,j]闭区间内的所有数的异或和等于k 题目 ...

  9. 莫队算法(普通莫队、带修莫队、树上莫队、不删除莫队)学习笔记【理解+套路/核心代码+例题及题解】

    一.理解 我的理解就是巧妙的暴力,利用双指针以及分块思想,巧妙的移动双指针,时间复杂度可以达到O(NlogN). 强推博客:写的又好又全.链接 二.套路 1.普通莫队 [1]核心代码 bool cmp ...

最新文章

  1. 经常使用ARM汇编指令
  2. 1.1 内存的四个分区
  3. vivo U1正式亮相
  4. IIS6+asp.net 2.0+HTTP 错误 404 - 文件或目录未找到:您正在搜索的页面可能已经删除、更名或暂时不可用。...
  5. “五心”知“五感”,平安打造有温度的智慧城市
  6. Cpp 对象模型探索 / 含有虚基类的类的内存布局
  7. python爬取新闻网站内容_python爬虫案例:抓取网易新闻
  8. 非常实用的Asp.net常用的51个代码
  9. 快手打击低俗直播 封禁一批高粉用户
  10. centos上安装updatedb,command not found
  11. 【转】Tomcat总体结构(Tomcat源代码阅读系列之二)
  12. sql中获取当前时间
  13. 别再装纯说不懂BT种子了
  14. 宅男福利!20行Python代码,一网打尽B站小姐姐的直播信号源!
  15. linux如何查询文件及文件夹大小
  16. [linux thermal] thermal device tree
  17. 关于如何职业规划和选择换工作
  18. 什么是预付卡及预付卡发展前景
  19. 【单调栈】zjoj p1859子序列累加和
  20. 杰理强制升级工具4.0使用和原理解析

热门文章

  1. 设计一个字典,并编写程序,用户输入内容作为键,然后输出字典中对应的值,如果用户输入的键不存在,则输出“您输入的键不存在
  2. linux open files
  3. 计算机天津市大学排名,天津工业大学各专业排名(天津各大高校排名情况)
  4. 两个聊天机器人的情话--今天打开淘宝旺旺看到聊天机器人,于是聊了两句,很有趣.........
  5. Java中final关键字、权限、内部类
  6. Linux史上最全教程
  7. git.exe 启动 慢_碱基编辑突变型TERT启动子可抑制脑肿瘤生长
  8. win10、11共享打印机报错无法连接到打印机
  9. Aperta为开曼群岛提供电子资金转账(EFT)服务
  10. MySQL生成随机字符串