CodeForces 1457D XOR-gun
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相关推荐
- 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 ...
- CodeForces - 1457D XOR-gun(位运算+暴力)
题目链接:点击查看 题目大意:给出一个长度为 n 的非降序列,现在可以执行数次操作:选择相邻的两个位置将其替换成异或和,更具体的,每次操作可以选择一个位置 i ,满足 1 <= i < n ...
- 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 ...
- codeforces 617E XOR and Favorite Number 莫队
https://vjudge.net/problem/CodeForces-617E 题目大意:给nnn个数,mmm个询问,以及一个数kkk,每次询问要输出[l,r][l,r][l,r]内满足a[i] ...
- CodeForces -617E XOR and Favorite Number(莫队)
题目链接:点击这里 题目大意: 给定一个长度为 nnn 的序列 a1,a2,...,ana_1,a_2,...,a_na1,a2,...,an ,再给出一个数字 kkk , mmm 组询问每组询 ...
- codeforces 242E XOR on Segment
E. XOR on Segment time limit per test 4 seconds memory limit per test 256 megabytes input standard i ...
- CodeForces - 1417E XOR Inverse(字典树求逆序对+分治)
题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a,现在要求选出一个 x,将 a 中的每个元素都异或之后得到一个新的数列 b,要求数列 b 的逆序对最小,问最小的逆序对是多少,x 该如何选择 ...
- CodeForces - 617E XOR and Favorite Number(莫队)
题目链接:点击查看 题目大意:给出一个由n个数组成的数列,现在给出m组询问,每次询问包含一个l和一个r,要求回答在闭区间[l,r]中有多少组(i,j)满足[i,j]闭区间内的所有数的异或和等于k 题目 ...
- 莫队算法(普通莫队、带修莫队、树上莫队、不删除莫队)学习笔记【理解+套路/核心代码+例题及题解】
一.理解 我的理解就是巧妙的暴力,利用双指针以及分块思想,巧妙的移动双指针,时间复杂度可以达到O(NlogN). 强推博客:写的又好又全.链接 二.套路 1.普通莫队 [1]核心代码 bool cmp ...
最新文章
- 经常使用ARM汇编指令
- 1.1 内存的四个分区
- vivo U1正式亮相
- IIS6+asp.net 2.0+HTTP 错误 404 - 文件或目录未找到:您正在搜索的页面可能已经删除、更名或暂时不可用。...
- “五心”知“五感”,平安打造有温度的智慧城市
- Cpp 对象模型探索 / 含有虚基类的类的内存布局
- python爬取新闻网站内容_python爬虫案例:抓取网易新闻
- 非常实用的Asp.net常用的51个代码
- 快手打击低俗直播 封禁一批高粉用户
- centos上安装updatedb,command not found
- 【转】Tomcat总体结构(Tomcat源代码阅读系列之二)
- sql中获取当前时间
- 别再装纯说不懂BT种子了
- 宅男福利!20行Python代码,一网打尽B站小姐姐的直播信号源!
- linux如何查询文件及文件夹大小
- [linux thermal] thermal device tree
- 关于如何职业规划和选择换工作
- 什么是预付卡及预付卡发展前景
- 【单调栈】zjoj p1859子序列累加和
- 杰理强制升级工具4.0使用和原理解析
热门文章
- 设计一个字典,并编写程序,用户输入内容作为键,然后输出字典中对应的值,如果用户输入的键不存在,则输出“您输入的键不存在
- linux open files
- 计算机天津市大学排名,天津工业大学各专业排名(天津各大高校排名情况)
- 两个聊天机器人的情话--今天打开淘宝旺旺看到聊天机器人,于是聊了两句,很有趣.........
- Java中final关键字、权限、内部类
- Linux史上最全教程
- git.exe 启动 慢_碱基编辑突变型TERT启动子可抑制脑肿瘤生长
- win10、11共享打印机报错无法连接到打印机
- Aperta为开曼群岛提供电子资金转账(EFT)服务
- MySQL生成随机字符串