CF1572B. Xor of 3

CF1572B. Xor of 3

题意:

给你个01序列,你有一种操作:每次选位置x,然后位置x,x+1,x+2的值变为三者的异或值。
现在要让所有的数都等于0,请输出存在的合法操作序列

题解:

首先如果有奇数个1,显然是无解的
此时我们从第一个1开始考虑,成对考虑消除1(因为这样异或为0),每次消除掉第一对1
如果两个1之间有奇数个0:
比如10001,100000001,这种是可以直接消掉的
就拿100000001来说,假设第一个1的位置为x,那我们可以依次操作x,x+2,x+4,…,(x<长度),此时序列为:111111101,然后操作x+6就得到111111000,然后再倒着执行x+4,x+2…这样就都变成0

如果两个1之间有偶数个0
这样是不能和上面一样直接消除的,可以先全部变成1,然后需要借助外面的0,也就是如果左边或右边有一个0,就可以消除,否则无解
比如1001 -> 1111 假设 原序列是10010, 右边有一个0, 那么现在11110可以消掉

实现起来挺麻烦的

代码:

#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
bool Handsome;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test(bool &Most)
{
#ifdef ONLINE_JUDGE
#elseprintf("%.2lfMB\n",(&Most-&Handsome)/1024.0/1024.0);startTime = clock ();freopen("data.in", "r", stdin);
#endif
}
void Time_test()
{
#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn=2e5+9;
int a[maxn],nex[maxn];
vector<int>ans;
int n; 
bool Most;
int solve(int x){if(x>n)return 0;if(nex[x]==0)return 1;if(a[x]==0||(nex[x]-x-1)%2){//如果当前位置是0,或者中间有奇数个1 if(a[x]==0)x=nex[x];//找到后面最近1的位置 while(x){if((nex[x]-x-1)%2){//中间奇数个1,内部直接消 int i;for(i=x;i+2<nex[x];i+=2)ans.push_back(i);for(;i>=x;i-=2)ans.push_back(i);}else {//借助左边的0消除 for(int i=x;i+2<nex[x];i+=2)ans.push_back(i);for(int i=x-1;i+2<=nex[x];i+=2)ans.push_back(i);}x=nex[nex[x]];//下下一个1的位置(因为1都是成对处理) }return 1; }else{//因为中间有偶数个1且当前不是0,所以需要判断后面能否出现0 if(solve(nex[x]+1)){for(int i=x;i<nex[x]-2;i+=2)ans.push_back(i);for(int i=nex[x]+1;i-2>=x;i-=2)ans.push_back(i-2);return 1;}elsereturn 0; } 
}
int main()
{rd_test(Most);int t;read(t);while(t--){read(n);for(int i=1;i<=n;i++)read(a[i]);int las=0;int cnt=0;for(int i=n;i>=1;i--){nex[i]=las;if(a[i])//如果非0,记录位置{las=i;cnt++;} }if(cnt%2)//如果奇数个1{printf("NO\n");continue; }ans.clear();if(solve(1)){printf("YES\n%d\n", ans.size());for(int i=0; i<ans.size(); i++) {printf("%d ", ans[i]);}printf("\n");} else printf("NO\n");}//Time_test();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P4103 [HEOI2014]大工程

P4103 [HEOI2014]大工程 题目描述 详见&#xff1a;P4103 [HEOI2014]大工程 Solution 显然是虚树的板子题啊&#xff08;我也不造我为啥调了1h&#xff09; 直接建虚树&#xff0c;DP。 两两路径和很好求&#xff0c;只要考虑每条边的贡献&#xff0c;设为询问的关键点个…

【中部武汉】理想离家并不遥远

▼我叫Mike, 是一名“高端”程序猿。毕业于武汉某男生比例占据 70%的高校。我的家乡是湖北襄阳&#xff0c;一个历史悠久的文化名城。7年前&#xff0c;我还是一个刚毕业的毛头小子&#xff0c;在学校也算是半个风云人物&#xff0c;年轻气盛&#xff0c;心比天高&#xff0c;放…

P2495 [SDOI2011]消耗战

P2495 [SDOI2011]消耗战 题目描述 详见&#xff1a;P2495 [SDOI2011]消耗战 Solution 此题是虚树的经典版子题吧qwq。 是不是直接贴代码就行了啊&#xff08;反正不是luogu题解&#xff0c;没有人查&#xff09;。 大概就是先建出虚树&#xff08;一般给定一堆关键点的题…

使用Try.NET创建可交互.NET文档

原文地址&#xff1a;Create Interactive .NET Documentation with Try .NET[1] 原文作者&#xff1a;Maria 译文地址&#xff1a;https://www.cnblogs.com/lwqlun/p/10894497.html 译者&#xff1a;Lamond Lu背景当我们编写开发人员使用的文档时&#xff0c;我们需要捕捉他们的…

Link-Cut Tree

Link-Cut Tree 概述. LCT是一种支持动态维护树上路径信息的数据结构&#xff0c;其本质是实链剖分&#xff0c;通过其他数据结构维护实链的信息达到维护路径及一些子树信息的效果&#xff08;通常为splay&#xff09; 刚开始学的时候感觉很难&#xff0c;但做过几道题了解套…

2021-2022ACM赛季小总结

最近一个月比赛月&#xff0c;做题量和频率太高&#xff0c;写博客浪费时间&#xff0c;所以一直没写。。 当前总结&#xff1a; CCPC桂林铜&#xff0c;银牌题线段树差一行调出&#xff0c;可惜又无奈&#xff0c;缺少运气 ICPC沈阳铜&#xff0c;银牌题的tarjan没想出来&…

ASP.NET Core模块化前后端分离快速开发框架介绍

源码地址GitHub&#xff1a;https://github.com/iamoldli/NetModular演示地址地址&#xff1a;http://118.24.75.170:6220/账户&#xff1a;admin密码&#xff1a;admin前端框架演示地址(临时)地址&#xff1a;http://progqx5cu.bkt.clouddn.com/skins/index.html#/账户&#x…

[POJ2888] Magic Bracelet

[POJ2888] Magic Bracelet 题目描述 简要题意&#xff1a;给圆上个点染色&#xff0c;颜色有种&#xff0c;其中对颜色不能相邻&#xff0c;循环同构&#xff0c;多组数据&#xff0c;询问染色方案数。 Solution 大概就是一道挺显然的Burnside题&#xff08;一般染色&#x…

手写编译器

假期没事想搞搞编译器&#xff0c;但学校课程未教过编译原理&#xff0c;自己只好在b站看了stanford的CS143《编译原理》&#xff0c;并结合相关资料&#xff0c;打算寒假期间自己手写一个简易的编译器 ReactjsbootStrap开发自制编译语言Monkey的编译器&#xff1a;创建简易的页…

使用命令行导出 SQL Server 数据层应用程序

点击上方蓝字关注“汪宇杰博客”我们可以使用 SSMS 导出 SQL Server 数据库的数据层应用程序。我在本地机器上使用这种方法已经有好几年了。如果不知道什么是 DAC&#xff0c;您可以参考 Microsoft 文档&#xff1a;https://docs.microsoft.com/en-us/sql/relational-databases…

Codeforces 1065 E. Side Transmutations

Codeforces 1065 E. Side Transmutations 题目描述 题意&#xff1a;一个字符串长度为&#xff0c;字符集大小为 &#xff0c;再给出种交换方式&#xff0c;表示可以交换。如果两个不同的串能够通过任意的交换方式得到相同的串&#xff0c;则视为相同&#xff0c;求方案数。…

P1 用reactjs和bootstrap创建页面IDE

文章目录页面IDE展示&#xff1a;要求&#xff1a;安装好Node.jsreactjs组件化开发页面IDE展示&#xff1a; 要求&#xff1a; 希望能够达到eclipse辅助编程的功能 关键字提醒&#xff0c;高亮 1&#xff0c; 有类似C语言的语法结构 2&#xff0c; 支持变量绑定 3&#xff0c;…

所以Apache基金会不受美国法律约束?

开源中国昨天发布的一篇文章《开源界也要注意&#xff0c;Apache 基金会与 GitHub 都受美国法律约束》引发了开源届乃至整个 IT 行业的热烈讨论&#xff0c;其中有个别声音认为文章的说法有误&#xff0c;甚至制造了恐慌。文中我们引用了两处内容&#xff0c;分别是 Apache 软件…

Loj#6485. LJJ 学二项式定理

Loj#6485. LJJ 学二项式定理&#xff08;单位根反演&#xff09; 题目描述 题目描述 题意&#xff1a;求下面式子的答案QAQ。 [∑((ni)⋅si⋅aimod4)]mod998244353[\sum(\tbinom{n}{i}\cdot s^i \cdot a_{i\;\;mod\;\;4}) ]\;mod\;\;998244353 [∑((in​)⋅si⋅aimod4​)]mod…

团体程序设计天梯赛-练习集

团体程序设计天梯赛-练习集 L2-001 紧急救援 (25 分) 知识点&#xff1a;最短路dij #include<bits/stdc.h> #define debug(x,y) printf("%s %d\n",x,y); typedef long long ll; using namespace std; inline int read(){int s0,w1;char chgetchar();while(…

C#中的Explicit和Implicit了解一下吧

今天在研究公司项目框架的时候看到了下面的用法&#xff0c;public static implicit operator JsonData(int data);。貌似很久没用过这种隐式转换的写法了&#xff0c;因此重新温习一下C#中转换相关的知识。作者&#xff1a;依乐祝原文地址&#xff1a;https://www.cnblogs.com…

bzoj#2125. 最短路

bzoj#2125. 最短路 题目描述 Description 给一个N个点M条边的连通无向图&#xff0c;满足每条边最多属于一个环&#xff0c;有Q组询问&#xff0c;每次询问两点之间的最短路径。 Input 输入的第一行包含三个整数&#xff0c;分别表示N和M和Q 下接M行&#xff0c;每行三个整数v…

Dapper的正确使用姿势

本文demo适用于MySQL优点高性能、易排查、易运维、灵活可控缺点和EF相比&#xff0c;手写sql当修改表结构不易发现bug。习惯了EF后再来使用Dapper&#xff0c;会很难适应那种没有了强类型的安全感。不过可以用单元测和心细来避免。问题&#xff1a;IDbConnection需不需要手动Op…

P4064 [JXOI2017]加法

P4064 [JXOI2017]加法 题意&#xff1a; 题解&#xff1a; 要求找最小值尽可能大&#xff0c;很明显二分&#xff0c;现在是如何判断二分出来的答案的正确性 对于一个二分出来的答案mid&#xff0c;要求对k个区间进行操作后&#xff0c;最小值大于mid&#xff0c;我们可以这…

[NewLife.XCode]百亿级性能

NewLife.XCode是一个有10多年历史的开源数据中间件&#xff0c;支持nfx/netcore&#xff0c;由新生命团队(2002~2019)开发完成并维护至今&#xff0c;以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析&#xff0c;蕴含多年开发经验于其中&#xff0c;代…