LRJ-Example-06-17-Uva10562
main() 函数中的这两行
fgets(buf[0], maxn, stdin);
sscanf(buf[0], "%d", &T);
不能简单替换为
scanf("%d", &T);
因为这会影响后面用fgets()读取数的内容。这个scanf之后调用 fgets() 会读取一个空的行。
从样例输出里面可以看到
每棵树的最外侧有一对()
每个叶子节点后面是(),代表空树
#include <cstdio>
#include <cstring>
#include <cctype> using namespace std; int n = ;
const int maxn = + ;
char tree[maxn][maxn]; bool isLabel(char c) {
if( c == '-' || c == '|' || c == ' ' || c == '#' || c == '\n') return false;
else return true;
} void dfs(int row, int col)
{
printf("%c(", tree[row][col]);
if(row+ < n && tree[row+][col] == '|') { // [row][col] has a subtree
//
if(row+ < n) { // ----
// find leftmost '-' of this subtree
int c = col;
int l = strlen(tree[row+]);
while(c- >= && tree[row+][c-] == '-') c--; //printf("\nleftmost - is at [%d][%d]\n", row+2, c); for(int i = c; i < l && tree[row+][i] == '-'; i++) { // each child
//if(row+3 < n && tree[row+3][i] != '\0' && !isspace(tree[row+3][i])) {
if(row+ < n && isLabel(tree[row+][i]) && !isspace(tree[row+][i])) {
dfs(row+, i);
}
}
}
}
printf(")");
} void solve() {
memset(tree, , sizeof(tree));
n = ;
while(true) {
fgets(tree[n], maxn, stdin); // read each line
if(tree[n][] == '#') break;
n++;
} /*
for(int i = 0; i < n; i++) {
printf("%s", tree[i]);
}
*/ printf("("); if(n > ) { // tree is not empty
int col = ;
int len = strlen(tree[]);
//while(col < len && tree[0][col] == ' ') col++; //dfs(0, col); //root is at [0][col]
for(int i = ; i < len; i++)
if(tree[][i] != ' ') {
dfs(, i);
break;
}
} printf(")\n");
} int main() {
int T;
fgets(tree[], maxn, stdin);
sscanf(tree[], "%d", &T);
while(T--) {
solve();
}
}
下面是 accept的代码
#include <cstdio>
#include <cstring>
#include <cctype> using namespace std; int n = ;
const int maxn = + ;
char tree[maxn][maxn]; bool isLabel(char c) {
if( c == '-' || c == '|' || c == ' ' || c == '#' || c == '\n') return false;
else return true;
} void dfs(int row, int col)
{
printf("%c(", tree[row][col]);
if(row+ < n && tree[row+][col] == '|') { // [row][col] has a subtree
//
if(row+ < n) { // ----
// find leftmost '-' of this subtree
int c = col;
int l = strlen(tree[row+]);
while(c- >= && tree[row+][c-] == '-') c--; //printf("\nleftmost - is at [%d][%d]\n", row+2, c); for(int i = c; i < l && tree[row+][i] == '-'; i++) { // each child
if(row+ < n && tree[row+][i] != '\0' && !isspace(tree[row+][i])) {
//if(row+3 < n && isLabel(tree[row+3][i]) && !isspace(tree[row+3][i])) {
dfs(row+, i);
}
}
}
}
printf(")");
} void solve() {
memset(tree, , sizeof(tree));
n = ;
while(true) {
fgets(tree[n], maxn, stdin); // read each line
if(tree[n][] == '#') break;
n++;
} /*
for(int i = 0; i < n; i++) {
printf("%s", tree[i]);
}
*/ printf("("); if(n > ) { // tree is not empty
int col = ;
int len = strlen(tree[]);
//while(col < len && tree[0][col] == ' ') col++; //dfs(0, col); //root is at [0][col]
for(int i = ; i < len; i++)
if(tree[][i] != ' ') {
dfs(, i);
break;
}
} printf(")\n");
} int main() {
int T;
fgets(tree[], maxn, stdin);
sscanf(tree[], "%d", &T);
while(T--) {
solve();
}
}
LRJ-Example-06-17-Uva10562的更多相关文章
- 中美贸易战再次开启,世界两极化进程正在加快形成!..... Copyright: 1688澳洲新闻网 Read more at: https://www.1688.com.au/world/international/2018/06/17/369368/
中美贸易战再次开启,世界两极化进程正在加快形成! https://www.1688.com.au/world/international/2018/06/17/369368/
- EZ 2018 06 17 NOIP2018 模拟赛(十九)
这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...
- 2019.06.17课件:[洛谷P1310]表达式的值 题解
P1310 表达式的值 题目描述 给你一个带括号的布尔表达式,其中+表示或操作|,*表示与操作&,先算*再算+.但是待操作的数字(布尔值)不输入. 求能使最终整个式子的值为0的方案数. 题外话 ...
- [每日一题2020.06.17] leetcode周赛T3 5438 制作m束花所需的最少天数 二分搜索
题目链接 这题我开始一直在想如何在数组上dp操作搜索区间, 很蠢, 实际上用二分查找的方法可以很快的解决 首先我们通过一个函数判断第x天是否符合题意, 如果x天可以做出m束花, 那么大于m的天数必然可 ...
- JavaSE学习总结第06天_Java语言基础2 & 面向对象1
06.01 二维数组概述和格式1的讲解 二维数组概述:二维数组其实就是一个元素为一维数组的数组 格式1:数据类型[][] 变量名 = new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...
- python性能检测工具整理
python 运行后出现core dump产生core.**文件,可通过gdb来调试 Using GDB with a core dump having found build/python/core ...
- Struts2入门(二)——配置拦截器
一.前言 之前便了解过,Struts 2的核心控制器是一个Filter过滤器,负责拦截所有的用户请求,当用户请求发送过来时,会去检测struts.xml是否存在这个action,如果存在,服务器便会自 ...
- 2016第七季极客大挑战Writeup
第一次接触CTF,只会做杂项和一点点Web题--因为时间比较仓促,写的比较简略.以后再写下工具使用什么的. 纯新手,啥都不会.处于瑟瑟发抖的状态. 一.MISC 1.签到题 直接填入题目所给的SYC{ ...
- A couple of notes about .NET Framework 4.6 setup behaviors
https://blogs.msdn.microsoft.com/astebner/2015/06/17/a-couple-of-notes-about-net-framework-4-6-setup ...
- Forward+
http://aras-p.info/blog/2012/03/02/2012-theory-for-forward-rendering/ http://www.slideshare.net/taka ...
随机推荐
- linux升级或安装程序后无法进入图形界面
报错如下: Failed to start the X server (your graphical interface). lt is likely that it is not set up co ...
- Dreamweaver CS5更改代码颜色方法代码
XP系统下: C:\Documents and Settings\Administrator\ApplicationData\Adobe\Dreamweaver CS4\zh_CN\Configura ...
- iview 中table列 一列显示多个数据(后台返回数组显示在列内)
一.首先出现的是比较复杂的一种情况(多个key) 1.首先页面显示效果如下 2.后台返回数据格式如下: 3.在iview中table的columns中的render函数: 4.具体代码 render: ...
- Windows 调用OpenProcess失败
OpenProcess 打开|获得进程句柄 函数原型: HANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwPro ...
- svn利用钩子脚本功能实现代码同步到web目录
一.hook简单介绍 为了方便管理员控制提交的过程 ,Subversion提供了hook机制.当特定的 事件发生时,相应的 hook会被调用,hook其实就相当于特定事件的处理函数.每个hook会得到 ...
- Django 配置MySQL数据库 mysql
Django 配置MySQL数据库 在settings.py中配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # ...
- UML时序图(Sequence Diagram)学习笔记
什么是时序图时序图(Sequence Diagram),又名序列图.循序图,是一种UML交互图.它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作. 让我们来看一看visio2016对时序 ...
- Direct2D 第2篇 绘制椭圆
原文:Direct2D 第2篇 绘制椭圆 #include <windows.h> #include <d2d1.h> #include <d2d1helper.h> ...
- Path Sum II深度优先找路径
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...
- Linux的登录和退出
Linux是一个多用户的操作系统,用户要使用该系统,首先必须登录系统,使用完系统后,必须退出系统. 本章主要讨论登录和退出系统的方法: 用户登录系统时,为了使系统能够识别自己,必须输入用户名和密码,经 ...