CF 1718 A2. Burenka and Traditions (hard version) 贪心 1900
题意:一个长度为 n 的数组 a,可以选择 l,r(1 ≤ l ≤ r ≤ n),使 al 到 ar 所有数都异或上任意一个数 x,需要花费 ⌈r − l + 1 / 2⌉ 秒,求将数组所有数变为 0 需要多少秒。
思路:选择的 l,r 长度应该不大于 2。对于 al⊕al+1⊕…⊕ar=0,我们设 l 到 r 的长度为 s,我们可以通过 s - 1次操作每次选择长度为 2 的段使al 到 ar 所有数都变为 0,花费的时间为 s-1 秒,而那些不在异或为0的段里的数,我们每次选择长度为 1 的操作,每次单独使一个数变 0,每次花费 1秒。所以对于长度为 n 的数组,我们最多花 n 秒就能完成,而每找到一个异或和为 0 的子段就能减少一秒,所以我们只要找到最多的异或和为 0 的子段就能求出答案。通过前缀异或和数组p,当 pl - 1 == pr,说明 al⊕al+1⊕…⊕ar=0,再通过贪心就能快速求出有多少个异或和为 0 的子段。
代码:
#include<bits/stdc++.h>
#define pb push_back
#define all(x) x.begin(), x.end()
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int N = 3e5 + 10, P = 1e9 + 7, mod = 998244353;
void solve(){set<int> s;int sum = 0, cnt = 0;int n;cin >> n;for(int i = 1; i <= n; i++){int x;cin >> x;sum ^= x;if(!sum || s.count(sum)) sum = 0, cnt++, s.clear();else s.insert(sum);} cout << n - cnt << endl;
}
int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int tt;cin >> tt;while(tt--) {solve();}return 0;
}
CF 1718 A2. Burenka and Traditions (hard version) 贪心 1900相关推荐
- codeforces1718 A1.Burenka and Traditions (easy version)
分析:我任选一段区间[L, R],在这个区间内,所有的数都异或得到一个异或值result[L][R]:那么当result[L][R] == 0 时, 我选相邻的两个数进行异或,一个个变为0,到R - ...
- C2. Pokémon Army (hard version)(贪心分治)
C2. Pokémon Army (hard version) (贪心&分治) 思路:局部最优解→\rightarrow→全局最优解. 显然答案数组长度为奇数,因为ai>0a_i> ...
- CF 529B Group Photo 2 (online mirror version)
传送门 解题思路 这道题要用到贪心的思路,首先要枚举一个h的最大值,之后check.如果这个东西的w[i]与h[i]都大于枚举的值就直接return false,如果w[i]比这个值小,h[i]比这个 ...
- Educational Codeforces Round 75 (Rated for Div. 2) E2. Voting (Hard Version) 贪心
传送门 文章目录 题意: 思路: 题意: n≤2e5,m≤n,p≤1e9n\le2e5,m\le n,p\le 1e9n≤2e5,m≤n,p≤1e9 思路: 首先需要发现一些性质,假设preipre_ ...
- Codeforces Round #726 (Div. 2) E2. Erase and Extend (Hard Version) 贪心
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的串sss,你有两个操作可以使用: (1)(1)(1)从sss的结尾删除一个字母. (2)s=s+s(2)s=s+s(2)s=s+s. 让 ...
- CF1526C2 Potions (Hard Version) (贪心 + 线段树)
题目链接: Potions (Hard Version) 大致题意 有n个数, 编号从1~n, 第i个位置的值为a[i]. 从编号为1的数字开始选择, 一直到编号为n的数字. 对于第i个数字, 你可以 ...
- E1. Rubik‘s Cube Coloring (easy version) 贪心,满二叉树(1300)
题意 : 给定一个层数为k的满二叉树,结点编号为标准的层序遍历的编号 魔方有六个面,如图,每个面一个颜色 树上的结点的颜色也是这六个颜色之一,但是两个相邻结点的颜色必须是 魔方中,颜色相邻的两种颜色 ...
- CodeForces - 1203F1 Complete the Projects (easy version)(贪心)
题目链接:点击查看 题目大意:现在有一个人,初始时有r元钱,现在有n个项目需要让他来解决,每个项目的门槛是a元钱,完成项目后的报酬是b元(报酬可以是负数),问能否在适当调整项目顺序后完成所有项目,能的 ...
- CF思维联系--CodeForces -214C (拓扑排序+思维+贪心)
ACM思维题训练集合 Furik and Rubik love playing computer games. Furik has recently found a new game that gre ...
最新文章
- C语言字符串排序!_只愿与一人十指紧扣_新浪博客
- Android系统原生应用解析之桌面闹钟及相关原理应用之时钟任务的应用(二)
- 基于keepalived对redis做高可用配置---转载
- DevExpress的TreeList实现自定义右键菜单打开文件选择对话框
- Java 中的并发工具类
- mono for android mysql_mono for android 自定义titleBar Actionbar 顶部导航栏 修改 样式 学习...
- joblib 读取模型后对单条数据做预测并解决Reshape your data either using array报错
- Sqlite3 数据库基本操作
- MATLAB说文本命令超过,MATLAB基础
- 这10个idea小技巧,让我的开发效率提升了10倍
- Python已知经纬度求两点距离
- VM10虚拟机安装图解
- android原生组件,RN原生的安卓UI组件
- springboot中对各个层的理解以及流程
- 计算机c语言二级编程题题库,计算机等级考试二级c语言编程题题库
- IBMX3250取消raid模式,直接装系统
- STM32 输入捕获测量脉冲周期/频率
- eos探索中踩过的雷
- php实现24点游戏,24点游戏的开发和实现(VC++)
- 比开源技术更重要的,可能是开源治理!