题意:一个长度为 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相关推荐

  1. codeforces1718 A1.Burenka and Traditions (easy version)

    分析:我任选一段区间[L, R],在这个区间内,所有的数都异或得到一个异或值result[L][R]:那么当result[L][R] == 0 时, 我选相邻的两个数进行异或,一个个变为0,到R - ...

  2. C2. Pokémon Army (hard version)(贪心分治)

    C2. Pokémon Army (hard version) (贪心&分治) 思路:局部最优解→\rightarrow→全局最优解. 显然答案数组长度为奇数,因为ai>0a_i> ...

  3. CF 529B Group Photo 2 (online mirror version)

    传送门 解题思路 这道题要用到贪心的思路,首先要枚举一个h的最大值,之后check.如果这个东西的w[i]与h[i]都大于枚举的值就直接return false,如果w[i]比这个值小,h[i]比这个 ...

  4. 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_ ...

  5. 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. 让 ...

  6. CF1526C2 Potions (Hard Version) (贪心 + 线段树)

    题目链接: Potions (Hard Version) 大致题意 有n个数, 编号从1~n, 第i个位置的值为a[i]. 从编号为1的数字开始选择, 一直到编号为n的数字. 对于第i个数字, 你可以 ...

  7. E1. Rubik‘s Cube Coloring (easy version) 贪心,满二叉树(1300)

    题意 : 给定一个层数为k的满二叉树,结点编号为标准的层序遍历的编号 魔方有六个面,如图,每个面一个颜色 树上的结点的颜色也是这六个颜色之一,但是两个相邻结点的颜色必须是 魔方中,颜色相邻的两种颜色 ...

  8. CodeForces - 1203F1 Complete the Projects (easy version)(贪心)

    题目链接:点击查看 题目大意:现在有一个人,初始时有r元钱,现在有n个项目需要让他来解决,每个项目的门槛是a元钱,完成项目后的报酬是b元(报酬可以是负数),问能否在适当调整项目顺序后完成所有项目,能的 ...

  9. CF思维联系--CodeForces -214C (拓扑排序+思维+贪心)

    ACM思维题训练集合 Furik and Rubik love playing computer games. Furik has recently found a new game that gre ...

最新文章

  1. C语言字符串排序!_只愿与一人十指紧扣_新浪博客
  2. Android系统原生应用解析之桌面闹钟及相关原理应用之时钟任务的应用(二)
  3. 基于keepalived对redis做高可用配置---转载
  4. DevExpress的TreeList实现自定义右键菜单打开文件选择对话框
  5. Java 中的并发工具类
  6. mono for android mysql_mono for android 自定义titleBar Actionbar 顶部导航栏 修改 样式 学习...
  7. joblib 读取模型后对单条数据做预测并解决Reshape your data either using array报错
  8. Sqlite3 数据库基本操作
  9. MATLAB说文本命令超过,MATLAB基础
  10. 这10个idea小技巧,让我的开发效率提升了10倍
  11. Python已知经纬度求两点距离
  12. VM10虚拟机安装图解
  13. android原生组件,RN原生的安卓UI组件
  14. springboot中对各个层的理解以及流程
  15. 计算机c语言二级编程题题库,计算机等级考试二级c语言编程题题库
  16. IBMX3250取消raid模式,直接装系统
  17. STM32 输入捕获测量脉冲周期/频率
  18. eos探索中踩过的雷
  19. php实现24点游戏,24点游戏的开发和实现(VC++)
  20. 比开源技术更重要的,可能是开源治理!

热门文章

  1. 【数据库修复】.Globeimposter-Alpha66qqz勒索病毒的数据库文件修复
  2. Windows共享上网的做法
  3. 无线网络技术导论笔记(第六讲)
  4. 诺贝尔奖得主费曼大神教你如何学习
  5. 爱情十三课,爱人的五功能
  6. 虚拟机VS容器 安全比拼谁更胜一筹?
  7. Log4j 2.x入门
  8. 齐博x1如何调用评论
  9. AF Haf tuning <4>
  10. matlab ncut谱聚类,NCUT 归一化分割、谱聚类之代码调试问题