time limit per test1 second

memory limit per test256 megabytes

inputstandard input

outputstandard output

Modern text editors usually show some information regarding the document being edited. For example, the number of words, the number of pages, or the number of characters.

In this problem you should implement the similar functionality.

You are given a string which only consists of:

uppercase and lowercase English letters,

underscore symbols (they are used as separators),

parentheses (both opening and closing).

It is guaranteed that each opening parenthesis has a succeeding closing parenthesis. Similarly, each closing parentheses has a preceding opening parentheses matching it. For each pair of matching parentheses there are no other parenthesis between them. In other words, each parenthesis in the string belongs to a matching “opening-closing” pair, and such pairs can’t be nested.

For example, the following string is valid: “Hello_Vasya(and_Petya)__bye(and_OK)”.

Word is a maximal sequence of consecutive letters, i.e. such sequence that the first character to the left and the first character to the right of it is an underscore, a parenthesis, or it just does not exist. For example, the string above consists of seven words: “Hello”, “Vasya”, “and”, “Petya”, “bye”, “and” and “OK”. Write a program that finds:

the length of the longest word outside the parentheses (print 0, if there is no word outside the parentheses),

the number of words inside the parentheses (print 0, if there is no word inside the parentheses).

Input

The first line of the input contains a single integer n (1 ≤ n ≤ 255) — the length of the given string. The second line contains the string consisting of only lowercase and uppercase English letters, parentheses and underscore symbols.

Output

Print two space-separated integers:

the length of the longest word outside the parentheses (print 0, if there is no word outside the parentheses),

the number of words inside the parentheses (print 0, if there is no word inside the parentheses).

Examples

input

37

Hello_Vasya(and_Petya)__bye(and_OK)

output

5 4

input

37

a(b___c)de_f(g)__h__i(j_k_l)m

output

2 6

input

27

(LoooonG)shOrt(LoooonG)

output

5 2

input

5

(_)

output

0 0

Note

In the first sample, the words “Hello”, “Vasya” and “bye” are outside any of the parentheses, and the words “and”, “Petya”, “and” and “OK” are inside. Note, that the word “and” is given twice and you should count it twice in the answer.

【题解】



字符串处理。

要求括号内的单词个数以及括号外最长的单词的长度。

把括号里面的内容提取出来然后用一个”_”代替这个括号和里面的内容;

ere_(dfsfd)df把括号去掉后就变成

ere__df

然后提取出来的是

dfsfd

然后在后面加个_



dfsfd;

重复上述操作直到

s存的是括号外的东西

ins存的是括号内的东西;

加上_的目的是区分两个单词;

然后进行所需的操作即可

#include <string>
#include <algorithm>
#include <iostream> using namespace std; int n;
string s;
string ins = ""; bool is_zm(char x)
{
if (('a' <= x && x <= 'z') || ('A' <= x && x <= 'Z'))
return true;
return false;
} int main()
{
//freopen("F:\\rush.txt", "r", stdin);
scanf("%d", &n);
cin >> s;
while (true)
{
bool flag = false;
int len = s.size();
for (int i = 0; i <= len - 1; i++)
if (s[i] == '(')
{
flag = true;
int j = i;
while (s[j] != ')')
j++;
int len1 = j - i + 1;
string temp = s.substr(i + 1, len1 - 2);
s.erase(i, len1);
s.insert(i, "_");
ins += temp;
ins += '_';
break;
}
if (!flag)
break;
}
s = "_" + s + "_";
ins = "_" + ins;
int ma = 0, cntin = 0;
int len = s.size();
int i = 0, j;
while (i <= len - 1)
{
j = i;
if (is_zm(s[i]))
{
while (is_zm(s[j + 1]))
j++;
int len = j - i + 1;
ma = max(len, ma);
}
i = j + 1;
}
len = ins.size();
i = 0;
while (i <= len - 1)
{
j = i;
if (is_zm(ins[i]))
{
cntin++;
while (is_zm(ins[j + 1]))
j++;
}
i = j + 1;
}
cout << ma << " " << cntin << endl;
return 0;
}

【44.10%】【codeforces 723B】Text Document Analysis的更多相关文章

  1. codeforces 723B:Text Document Analysis

    Description Modern text editors usually show some information regarding the document being edited. F ...

  2. Codefoces 723B Text Document Analysis

    B. Text Document Analysis time limit per test:1 second memory limit per test:256 megabytes input:sta ...

  3. Codeforces Round #375 (Div. 2) B. Text Document Analysis 模拟

    B. Text Document Analysis 题目连接: http://codeforces.com/contest/723/problem/B Description Modern text ...

  4. 【Codeforces 723B】Text Document Analysis 模拟

    求括号外最长单词长度,和括号里单词个数. 有限状态自动机处理一下. http://codeforces.com/problemset/problem/723/B Examples input 37_H ...

  5. Java Web程序设计笔记 • 【第10章 JSTL标签库】

    全部章节   >>>> 本章目录 10.1 JSTL 概述 10.1.1 JSTL 简介 10.1.1 JSTL 使用 10.1.2 实践练习 10.2 核心标签库 10.2. ...

  6. 【2017.10.13 ROS机器人操作系统】ROS系统常用术语及资源

    ROS机器人操作系统是一种后操作系统,提供了类似于软件开发中使用到的中间件的功能. ROS: Robot Operating System 机器人操作系统 Package: 功能包 Stack: 功能 ...

  7. 【 BowWow and the Timetable CodeForces - 1204A 】【思维】

    题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...

  8. codeforces 723B Text Document Analysis(字符串模拟,)

    题目链接:http://codeforces.com/problemset/problem/723/B 题目大意: 输入n,给出n个字符的字符串,字符串由 英文字母(大小写都包括). 下划线'_' . ...

  9. Text Document Analysis CodeForces - 723B

    Modern text editors usually show some information regarding the document being edited. For example, ...

随机推荐

  1. golang 数组

    数组是Go语言编程中最常用的数据结构之一.顾名思义,数组就是指一系列同一类型数据的集合.数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度. 在Go语言中数组 ...

  2. 平衡树之RB-tree

    #include <memory> template<class T> struct rb_node { T key; bool color;//true red | fals ...

  3. Android之——短信的备份与还原

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47091281 眼下,Android手机中的一些软件能够实现手机短信的备份与还原操作 ...

  4. Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))

    1.回想 上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的样例 2.重点 (1)封装Volley 内部 请求 类(请求队列,数据请求,图片 ...

  5. onvif开发实战2--总结框架搭建

    完成框架搭建后,编写自己的主函数起onvif服务 编写makefile objs = onvif.o onvif_func.o duration.o soapC.o soapServer.o stds ...

  6. 31.Node.js 常用工具 util

    转自:http://www.runoob.com/nodejs/nodejs-module-system.html util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaS ...

  7. css 兼容性前缀

    一.不同浏览器内核下的书写规则 二:transform  具体变性中心基点  transform-origin  默认情况下  rotate旋转.scale缩放.translate位移.矩阵matri ...

  8. Elasticsearch入门系列~通过Java一系列操作Elasticsearch

    Elasticsearch索引的创建.数据的增删该查操作 上一章节已经在Linux系统上安装Elasticsearch并且可以外网访问,这节主要通过Java代码操作Elasticsearch 1.创建 ...

  9. C# 反射具体解释

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...

  10. JQuery 各节点获取函数:父节点,子节点,兄弟节点

    jQuery.parent(expr)           //找父元素 jQuery.parents(expr)          //找到所有祖先元素,不限于父元素 jQuery.children ...