http://codeforces.com/problemset/problem/770/D

我先找出每个括号'+'的位置和每个s[i]的高度

括号一定会出现[],就是s[i]='[' s[i+1]=']',对于这种匹配,那么观察图可知,']'的'+'向右移动三格,否则就是向右

移动一格罢了,然后处理出最大的h,那么关于x=h对称,找出另外一边的'+',那么中间剩余的全是'|'。

///                 .-~~~~~~~~~-._       _.-~~~~~~~~~-.
///             __.'              ~.   .~              `.__
///           .'//                  \./                  \\`.
///        .'//                     |                     \\`.
///       .'// .-~"""""""~~~~-._     |     _,-~~~~"""""""~-. \\`.
///     .'//.-"                 `-.  |  .-'                 "-.\\`.
///   .'//______.============-..   \ | /   ..-============.______\\`.
/// .'______________________________\|/______________________________`.
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <vector>
#include <iostream>
#include <string>
#include <map>
#include <stack>
#include <cstring>
#include <queue>
#include <list>
#include <stdio.h>
#include <set>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <iomanip>
#include <cctype>
#include <sstream>
#include <functional>
#include <stdlib.h>
#include <time.h>
#include <bitset>
using namespace std;#define pi acos(-1)
#define s_1(x) scanf("%d",&x)
#define s_2(x,y) scanf("%d%d",&x,&y)
#define s_3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define s_4(x,y,z,X) scanf("%d%d%d%d",&x,&y,&z,&X)
#define S_1(x) scan_d(x)
#define S_2(x,y) scan_d(x),scan_d(y)
#define S_3(x,y,z) scan_d(x),scan_d(y),scan_d(z)
#define PI acos(-1)
#define endl '\n'
#define srand() srand(time(0));
#define me(x,y) memset(x,y,sizeof(x));
#define foreach(it,a) for(__typeof((a).begin()) it=(a).begin();it!=(a).end();it++)
#define close() ios::sync_with_stdio(0); cin.tie(0);
#define FOR(x,n,i) for(int i=x;i<=n;i++)
#define FOr(x,n,i) for(int i=x;i<n;i++)
#define fOR(n,x,i) for(int i=n;i>=x;i--)
#define fOr(n,x,i) for(int i=n;i>x;i--)
#define W while
#define sgn(x) ((x) < 0 ? -1 : (x) > 0)
#define bug printf("***********\n");
#define db double
#define ll long long
#define mp make_pair
#define pb push_back
typedef long long LL;
typedef pair <int, int> ii;
const int INF=0x3f3f3f3f;
const LL LINF=0x3f3f3f3f3f3f3f3fLL;
const int dx[]={-1,0,1,0,1,-1,-1,1};
const int dy[]={0,1,0,-1,-1,1,-1,1};
const int maxn=5e5+10;
const int maxx=1e3+10;
const double EPS=1e-8;
const double eps=1e-8;
const int mod=1e9+7;
template<class T>inline T min(T a,T b,T c) { return min(min(a,b),c);}
template<class T>inline T max(T a,T b,T c) { return max(max(a,b),c);}
template<class T>inline T min(T a,T b,T c,T d) { return min(min(a,b),min(c,d));}
template<class T>inline T max(T a,T b,T c,T d) { return max(max(a,b),max(c,d));}
template <class T>
inline bool scan_d(T &ret){char c;int sgn;if (c = getchar(), c == EOF){return 0;}
while (c != '-' && (c < '0' || c > '9')){c = getchar();}sgn = (c == '-') ? -1 : 1;ret = (c == '-') ? 0 : (c - '0');
while (c = getchar(), c >= '0' && c <= '9'){ret = ret * 10 + (c - '0');}ret *= sgn;return 1;}inline bool scan_lf(double &num){char in;double Dec=0.1;bool IsN=false,IsD=false;in=getchar();if(in==EOF) return false;
while(in!='-'&&in!='.'&&(in<'0'||in>'9'))in=getchar();if(in=='-'){IsN=true;num=0;}else if(in=='.'){IsD=true;num=0;}
else num=in-'0';if(!IsD){while(in=getchar(),in>='0'&&in<='9'){num*=10;num+=in-'0';}}
if(in!='.'){if(IsN) num=-num;return true;}else{while(in=getchar(),in>='0'&&in<='9'){num+=Dec*(in-'0');Dec*=0.1;}}
if(IsN) num=-num;return true;}void Out(LL a){if(a < 0) { putchar('-'); a = -a; }if(a >= 10) Out(a / 10);putchar(a % 10 + '0');}
void print(LL a){ Out(a),puts("");}
//freopen( "in.txt" , "r" , stdin );
//freopen( "data.txt" , "w" , stdout );
//cerr << "run time is " << clock() << endl;char s[105],res[105][255];
void solve()
{int n,d=0,w=0,h=0;scanf("%d%s",&n,s);for(int i=0;i<n;i++){if(s[i]=='['){res[d][w]='+';res[d][w+1]='-';//d 行 w列 d++,w++;}else{d--;if(s[i-1]=='[')w+=3;res[d][w]='+';res[d][w-1]='-';w++;}h=max(h,d);}    for(int i=h+1;i<=2*h;i++)for(int j=0;j<w;j++)res[i][j]=res[2*h-i][j];for(int j=0;j<w;j++)for(int i=0,k=0;i<=2*h;i++){if(res[i][j]=='+')k^=1;else if(!res[i][j])res[i][j]=" |"[k];}for(int i=0;i<=2*h;i++)printf("%s\n",res[i]);
}int main()
{//freopen( "1.txt" , "r" , stdin );//freopen( "data.txt" , "w" , stdout );int t=1;//init();//s_1(t);for(int cas=1;cas<=t;cas++){//printf("Case #%d: ",cas);solve();}
}

Codeforces 770D Draw Brackets! 模拟+中缀表达式相关推荐

  1. 字符串得结果!Java数组模拟栈以实现中缀表达式综合计算器,字符串表达式计算器

    文章目录 数组模拟栈类 中缀表达式计算器类(测试类) 数组模拟栈类 主要实现栈的一些基本功能,以及在该场景下的功能. //先创建一个栈 class AStack {private int maxSiz ...

  2. 七、使用栈实现综合计算器(中缀表达式)

    使用栈实现综合计算器(中缀表达式) 1.栈的实际需求 请输入一个表达式,计算式:[722-5+1-5+3-3] ,计算出结果 计算机底层是如何运算得到结果的? 注意不是简单的把算式列出运算,因为我们看 ...

  3. 数据结构之中缀表达式实现计算器

    栈还是用的上一篇的数组模拟栈,并在此之上增加了 判断是否是一个运算符的方法 获取运算符的优先级方法 计算结果方法 查看栈顶元素的方法 四个方法,具体代码如下: package com.ebiz.sta ...

  4. Java数据结构之中缀表达式转后缀表达式

    简介 通过数组模拟栈进行中缀表达式转后缀表达式,再进行计算 不说废话,请看代码. package com.atguigu.Stack;import java.util.ArrayList; impor ...

  5. 中缀表达式转后缀表达式详细思路及代码实现

    什么是中缀表达式? 中缀表达式是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(eg:3+4.3+4*2.8+(17-6*2)-.). 为什么要中缀表达式转后缀表达式? 但是中 ...

  6. 前缀表达式(无括号)转成中缀表达式(有括号)思路及代码

    ①思路:对前缀表达式进行从后往前的遍历,利用一个栈来存放读到的常量和变量.读到运算符时,利用栈的特性(LIFO),先出栈的元素必然是运算符左边的元素,后出栈的元素必然是运算符右边的元素,然后在该表达式 ...

  7. 栈趣用---中缀表达式实现简易计算器

    中缀表达式:我们日常生活中用的表达式就是中缀表达式,比如4+5*6-7,它的特点就是人容易理解和计算,但是计算机不买账,对于中缀表达式,计算机实现起来复杂度很高,这里模拟了计算机计算中缀表达式过程,实 ...

  8. java中缀表达式转后缀表达式(逆波兰算法)

    四则运算是栈的重要应用之一 中缀表达式转后缀表达式(逆波兰算法)过程 从左到右遍历中缀表达式 数字直接输出为后缀表达式一部分 如果是符号,则判断与栈顶元素的优先级 高于栈顶元素优先级直接入栈 低于或等 ...

  9. java中缀表达式转后缀表达式_数据结构Java实现06----中缀表达式转换为后缀表达式...

    本文主要内容: 表达式的三种形式 中缀表达式与后缀表达式转换算法 一.表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3.我们从小做数学题时,一直使用的就是中缀表达式. 后 ...

最新文章

  1. Docker 入门系列(6)- Docker 互联
  2. MPU6050开发 -- 卡尔曼滤波(转)
  3. switch注意事项
  4. 移动端去掉按钮点击热区
  5. linux红黑树节点没有数据,真正理解红黑树,真正的(Linux内核里大量用到的数据 -电脑资料...
  6. 深度学习(十六)基于2-channel network的图片相似度判别
  7. PAT之STL:vector、set、map、stack、queue
  8. 【网络工程师】 H3C如何配置VLAN-trunk 二层隔离技术
  9. html跑马灯效果代码加速,网页特效_跑马灯特效代码大全一
  10. Android性能测试工具(一) 之Emmagee[转载]
  11. 整体改革理论(简介)
  12. c语言:用牛顿迭代法求方程在1.5附近的根:2x^3-4x^2+3x-6=0.
  13. R语言数据可视化之美:专业图表绘制指南
  14. 浅谈估值模型:实现GGM的理想国(附代码)
  15. 为什么编程是独一无二的职业
  16. 考研这么卷,换条路试试​?互联网IT校园招聘信息大全!
  17. 杰理之检测linein音频输入大小(能量)的方法【篇】
  18. Unity 中操作数据文件
  19. 一次公司培训后的学习心得
  20. 关于K8s中资源配置范围管理(LimitRange)的一些笔记

热门文章

  1. DECIMAL 使用教程
  2. 《解剖PetShop》系列
  3. 斗鱼直播Android开发二面被刷,手慢无
  4. 一次生产慢响应问题排查:TRUNCATE TABLE (MySQL Bug 68184)
  5. 优质流量水涨船高,私域流量营销裂变该如何做好?
  6. 如何在 iMovie 中创建很棒的幻灯片演示文稿
  7. 【大话设计模式】——代理模式
  8. alooa是华为什么型号_hry一alooa是什么型号
  9. 2022 年最新的实体识别抽取模型框架W2NER
  10. iphone开发的几个步骤