zoukankan      html  css  js  c++  java
  • [UOJ #31]【UR #2】猪猪侠再战括号序列

    题目大意:给你一个长度为$2n$的括号序列,保证$n$个`(`,$n$个`)`。要求输出一种可行方案,通过小于等于$n$的步数,每次交换区间$[x_i,y_i]$(立即交换),使得最后括号序列合法

    题解:找到第一个`)`和最后一个`(`,交换

    卡点:看成读入后一起交换

    C++ Code:

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    struct _ {
    	int id;
    	char need;
    } x, y;
    char s[100010 << 1];
    int n, m;
    int ans[100010][2], tmp[2];
    int main() {
    	scanf("%s", s);
    	n = strlen(s);
    	x = (_) {0, ')'};
    	y = (_) {n - 1, '('};
    	tmp[1] = 0, tmp[0] = n - 1;
    	int now = 1;
    	while (x.id < y.id) {
    		while (s[x.id] != x.need && x.id < y.id) x.id++, tmp[now] += now == 1 ? 1 : -1;
    		while (s[y.id] != y.need && x.id < y.id) y.id--, tmp[now ^ 1] += now == 1 ? -1 : 1;
    		if (x.id >= y.id) break;
    		ans[m][0] = tmp[now], ans[m][1] = tmp[now ^ 1];
    		if (ans[m][0] > ans[m][1]) std::swap(ans[m][0], ans[m][1]);
    		m++;
    		std::swap(x.need, y.need);
    		now ^= 1;
    	}
    	printf("%d
    ", m);
    	for (int i = 0; i < m; i++) printf("%d %d
    ", ans[i][0] + 1, ans[i][1] + 1);
    }
    
  • 相关阅读:
    CentOS6.9依赖包快速安装指南
    CentOS 6.5安装部署Zabbix 3.05指南
    Nginx最佳安装与优化
    Linux Bonding最优配置
    macOS下用命令行发邮件
    Linux iperf网络性能测试
    MTR网络诊断自动脚本实例
    nmon监控linux资源使用情况
    思科HSRP配置实例
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/9637225.html
Copyright © 2011-2022 走看看