例题6-17 看图写树(Undraw the Trees, UVa 10562)

来源:互联网 发布:2017年快餐行业数据 编辑:程序博客网 时间:2024/06/11 13:00
字符串的整行读取gets()VS上用不了,gets_s()编译不过。。。
fgets(char *, size, stdin), 注意换行符也被读取进了字符串。
这题逻辑没问题,但还是debug了很久,主要是数组越界的问题,以后一定注意!
#include <iostream>#include <string>#include <vector>#include <stack>#include <queue>#include <deque>#include <set>#include <map>#include <algorithm>#include <functional>#include <utility>#include <cstring>#include <cstdio>#include <cstdlib>#include <ctime>#include <cmath>#include <cctype>#define CLEAR(a, b) memset(a, b, sizeof(a))#define IN() freopen("in.txt", "r", stdin)#define OUT() freopen("out.txt", "w", stdout)#define LL long long#define maxn 205#define maxm 100005#define mod 1000000007#define INF 1000000007#define EPS 1e-7#define PI 3.1415926535898#define N 26using namespace std;//-------------------------CHC------------------------------//char buf[maxn][maxn];int line;void solve(int row, int l, int r) {putchar('(');r = min(r, (int)strlen(buf[row]) - 1);for (int i = l; i <= r; ++i) {if (!isspace(buf[row][i])) {putchar(buf[row][i]);if (row + 1 < line && buf[row + 1][i] == '|') {//注意int cl = i, cr = i;while (buf[row + 2][cl-1] == '-') --cl;while (buf[row + 2][cr+1] == '-') ++cr;solve(row + 3, cl, cr);}else printf("()");}}putchar(')');}int main() {int T;scanf("%d", &T); getchar();while (T--) {line = 0;while (fgets(buf[line], maxn, stdin) && strcmp(buf[line], "#\n")) line++;if (line) {int pos = 0;while (isspace(buf[0][pos])) pos++;solve(0, pos, pos);}else printf("()");putchar('\n');}return 0;}