Codeforces Round 825 D. Equal Binary Subsequences 【思维】

D. Equal Binary Subsequences

题意

D
2

给定一个长度为 2 n 2n 2n 01 01 01 字符串 s s s,现在需要恰好使用一次下面的操作,将其划分为相等的两个子序列

定义操作:

  • 选择某些下标,并这些下标代表的子序列向右循环移动一位

如果可以成功划分,输出操作序列

思路

首先不难发现: 1 1 1 0 0 0 的个数必须是偶数,因为两个子序列要相等

我们先给出 结论 ,如果 1 1 1 0 0 0 个数是偶数,那么一定可以成功划分

方法如下:
先将 s s s 按照: ∀ i ∈ [ 1 , n ] \forall i \in [1,n] i[1,n],分成 n n n ( s 2 i − 1 , s i ) (s_{2i - 1},s_{i}) (s2i1,si) 这样的配对,假设有 x x x s 2 i − 1 ≠ s 2 i s_{2i-1} \neq s_{2i} s2i1=s2i,那么剩下 n − x n - x nx 个都是相等的配对。我们可以得出: x x x 一定是偶数

这是因为: 1 1 1 的数量是偶数,且 1 1 1 n − x n-x nx 个相等配对中出现偶数次,在 x x x 个不等配对中出现 x x x 次,那么为了最终数量为偶数, x x x 必须为偶数才行

对于那些相等的配对,我们可以一个分给 s 1 s_1 s1,另外一个分给 s 2 s_2 s2,对于那些不等的配对,我们可以在奇数次的时候将 0 0 0 分给 s 1 s_1 s1,在偶数次的时候将 1 1 1 分给 s 1 s_1 s1。这样子 s 1 = 0 , 1 , 0 , 1 , 0 , 1 , . . . 0 , 1 s_1 =0,1,0,1,0,1,...0,1 s1=0,1,0,1,0,1,...0,1 s 2 = 1 , 0 , 1 , 0 , 1 , 0 , . . . , 1 , 0 s2 = 1,0,1,0,1,0,...,1,0 s2=1,0,1,0,1,0,...,1,0

它们恰好等于彼此反转,如果我们对于分配给 s 1 s_1 s1 的那些下标,执行一次循环右移操作, s 1 s_1 s1 就会变成: 1 , 0 , 1 , 0 , 1 , 0 , . . . , 1 , 0 1,0,1,0,1,0,...,1,0 1,0,1,0,1,0,...,1,0,相当于将 s 1 s_1 s1 翻转了。此时 s 1 = s 2 s_1 = s_2 s1=s2

#include<bits/stdc++.h>
#define fore(i,l,r)	for(int i=(int)(l);i<(int)(r);++i)
#define fi first
#define se second
#define endl '\n'
#define ull unsigned long long
#define ALL(v) v.begin(), v.end()
#define Debug(x, ed) std::cerr << #x << " = " << x << ed;const int INF=0x3f3f3f3f;
const long long INFLL=1e18;typedef long long ll;void solve(){int n;std::cin >> n;std::string s;std::cin >> s;int n1 = 0;for(auto c : s) n1 += (c == '1');if(n1 & 1){std::cout << -1 << endl;return;}s = '0' + s;std::vector<std::pair<int, int>> v;for(int i = 1; i < 2 * n; i += 2)if(s[i] != s[i + 1])v.emplace_back(i, i + 1);std::vector<int> op;fore(i, 0, v.size()){auto [p1, p2] = v[i];if(i & 1){if(s[p1] == '1') op.push_back(p1);else op.push_back(p2);}else{if(s[p1] == '0') op.push_back(p1);else op.push_back(p2);}}std::cout << op.size() << ' ';for(auto i : op) std::cout << i << ' ';   //翻转s1std::cout << endl;for(int i = 1; i < 2 * n; i += 2) std::cout << i << ' ';std::cout << endl;
}int main(){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int t;std::cin >> t;while(t--){solve();}return 0;
}

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

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

相关文章

SSA-LSTM多输入分类预测 | 樽海鞘优化算法-长短期神经网络 | Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

Go Zero微服务个人探究之路(十六)回顾api服务和rpc服务的本质

目录 前言 正文 API&#xff08;Application Programming Interface&#xff09; RPC&#xff08;Remote Procedure Call&#xff09; API 与 RPC 的关系 分布式部署 API 和 RPC 结语 前言 go-zero 是一个基于 Go 语言的微服务框架&#xff0c;它提供了一套简洁的编程模…

code摘录日记[矩阵变元素,变列向量,3D表面图] Matlab

W1(Z1 < Z2) nan; % Z1,Z2 all matrix,Only plot points where Z1 > Z2;Z1 < Z2位置值填为NaNx x(:); % Now x is a 30-by-1 vector; matrix变列vector技巧hand figure; % Handle to the figure, for more plotting later set(gcf,Color,w) % White background sur…

图像处理与图像分析—图像统计特性的计算(纯C语言实现灰度值显示)

根据输入的灰度图像&#xff0c;分别计算图像的均值、方差等统计特征&#xff0c;并计算图像的直方图特征并以图形方式显示图像的直方图&#xff08;用C或C语言实现&#xff09;。 学习将会依据教材图像处理与图像分析基础&#xff08;C/C&#xff09;版内容展开 在上个笔记中&…

C语言排序算法

int main() { int i; int arr[]{49,38,65,97,76,13,27,49}; int nsizeof(arr)/sizeof(arr[0]); //数据开始的排列 for(i0;i<n;i) { printf("%d ",arr[i]); } printf("\n"); //排序后 InsertSort(arr,n…

机器学习-0X-神经网络

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中神经网络算法。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化接口实现 参考 机器学习定义 关于机…

GEE错误——Layer 2: Tile error: Reprojection output too large (10277x10480 pixels).

错误 Layer 2: Tile error: Reprojection output too large (10277x10480 pixels). Layer 2: Tile error: Reprojection output too large (10150x10479 pixels). Output of image computation is too large (18 bands for 3150625 pixels = 240.4 MiB > 80.0 MiB). 如果我…

Oracle P6 负浮时和必须完成日期

前言 学习过计划的人大都有这有这样的经历&#xff0c;即无论是Microsoft Project 亦或是P6见过负浮时那么 Primavera P6 计划中的负浮时是从何而来的呢&#xff0c;那么本文可能会有所帮助。 首先&#xff0c;当活动的最晚日期早于最早日期时&#xff0c;就会出现负浮时。 换…

Linux动态追踪——ftrace

目录 摘要 1 初识 1.1 tracefs 1.2 文件描述 2 函数跟踪 2.1 函数的调用栈 2.2 函数调用栈 2.3 函数的子调用 3 事件跟踪 4 简化命令行工具 5 总结 摘要 Linux下有多种动态追踪的机制&#xff0c;常用的有 ftrace、perf、eBPF 等&#xff0c;每种机制适应于不同的场…

uniapp h5 部署

uniapp 配置 服务器文件路径 打包文件结构 //nginx 配置 server {listen 8300;server_name bfqcwebsiteapp;charset utf-8;#允许跨域请求的域&#xff0c;* 代表所有add_header Access-Control-Allow-Origin *;#允许带上cookie请求add_header Access-Control-Allow-C…

LeetCode_27_简单_移除元素

文章目录 1. 题目2. 思路及代码实现&#xff08;Java&#xff09;2.1 双指针2.2 双指针优化 1. 题目 给你一个数组 n u m s nums nums 和一个值 v a l val val&#xff0c;你需要 原地 移除所有数值等于 v a l val val 的元素&#xff0c;并返回移除后数组的新长度。 不要…

docker harbor.v2.9.2搭建镜像无法下载问题解决

在通过部署docker harbor时&#xff0c;采用的是离线包的方式&#xff0c;当解压压缩包后&#xff0c;执行prepare脚本步骤中有一步是要获取prepare:v2.9.2版本镜像 结果执行脚本时报如下错误&#xff1a; Unable to find image goharbor/prepare:v2.9.2 locally 这时候我们就…

算法思想总结:二分查找算法

创作不易&#xff0c;感谢三连&#xff01;&#xff01; 一、二分查找算法思路总结 大家先看总结&#xff0c;然后再根据后面的题型去慢慢领悟 二、二分查找&#xff08;easy&#xff09; . - 力扣&#xff08;LeetCode&#xff09;二分查找 思路&#xff1a;&#xff08;模…

每日学习笔记:C++ STL 的forward_list

定义 特点 操作函数 元素查找、移除或安插 forward_list::emplace_after arg...指的是元素构造函数的参数&#xff08;0~N个&#xff09; #include <iostream> #include <memory> #include <list> #include <forward_list> using namespace std;class…

海思3516将BT1120改BT656输出大小为720*576

sample_comm_vi.c结构体 VI_DEV_ATTR_S DEV_ATTR_BT656D1_1MUX VI_DEV_ATTR_S DEV_ATTR_BT656D1_1MUX {/* interface mode */VI_MODE_BT656,/* multiplex mode */VI_WORK_MODE_1Multiplex,/* r_mask g_mask b_mask*/{0xFF0000, 0x0},//掩码根据自己实际写/* progess…

基于YOLOv8深度学习的野外火焰烟雾检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

如何有效避免团队内耗,提升团队整体效能

团队内耗是一个普遍存在的问题&#xff0c;它可能导致工作效率低下、沟通不畅、成员间的信任缺失&#xff0c;甚至可能导致整个团队的崩溃。 它可能源于成员间的误解、利益冲突&#xff0c;或是个人情绪的波动。 如何避免团队内耗&#xff0c;是每个团队管理者和成员都应该关…

新质生产力

新质生产力是以科技创新为引擎&#xff0c;以新产业为主导&#xff0c;以产业升级为方向&#xff0c;以提升核心竞争力为目标的生产力。它融合人工智能、大数据等数字技术&#xff0c;更强调内在的发展质量&#xff0c;旨在走出一条生产要素投入少、资源配置效率高、资源环境成…

java组合模式揭秘:如何构建可扩展的树形结构

组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构以表示整体/部分层次结构。组合模式使得客户端可以统一对待单个对象和组合对象&#xff0c;从而使得客户端可以处理更复杂的结构。 组合模式的主要组成部分包括&…

在Linux/Ubuntu/Debian中测试USB驱动器(U盘)的速度

如果你想测试USB驱动器的速度&#xff0c;可以使用各种工具和命令来测量读写速度。 用于此目的的一个常用工具是“dd”。 以下是如何使用“dd”执行简单的速度测试&#xff1a; 测试写入速度&#xff1a; 打开终端。 使用以下命令将测试文件写入 USB 驱动器&#xff1a; dd i…