【51NOD 1478】括号序列的最长合法子段
2016-04-26 15:08
393 查看
很恶心啊,一道水题改了半天,主要是各种细节没有注意到,包括左括号剩余时有可能会出错的情况,需要从后往前扫
贡献一组测试数据:
((()))())(())((
答案:8 1
贡献一组测试数据:
((()))())(())((
答案:8 1
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 1E6 + 3; char s ; int main() { scanf("%s", s); int n = strlen(s), now = 0, ans = 0, ans2, sum = 0, top = 0, tmp = 0; for(int i = 0; i < n; ++i) if (s[i] == '(') ++top; else { if (top) { --top; sum += 2; } else { if (sum > now) { now = sum; ans = 1; } else if (sum == now) ++ans; tmp = i + 1; top = 0; sum = 0; } } if (top) { ans2 = 0; sum = 0; top = 0; for(int i = n - 1; i >= tmp; --i) if (s[i] == ')') ++top; else { if (top) { --top; sum += 2; } else { if (sum > now) { now = sum; ans = 1; } else if (sum == now) ++ans; top = 0; sum = 0; } } if (sum > now) now = sum, ans = 1; else if (sum == now) ++ans; } else { if (sum > now) now = sum, ans = 1; else if (sum == now) ++ans; } if (now == 0) ans = 1; printf("%d %d\n", now, ans); return 0; }
相关文章推荐
- .Net实现微信公众平台开发接口(二) 之 “获取access_token”
- word2007怎么转换成pdf格式
- Golang的TLS通信,证书文件使用.
- 记录linux软件源代理服务器设置方法
- 最全面的 Android 编码规范指南
- 让屏幕保持竖屏
- 'net’ 不是内部命令或外部命令,也不是可运行的程序或批处理文件
- 百度地图问题汇总
- UE3名称结构(Name)
- 文件管理 - 1
- 给 Android 开发者的 RxJava 详解
- javascript处理HTML的Encode(转码)和Decode(解码)总结
- Java相对路径读取文件
- 【java线程系列】java线程系列之线程间的交互wait()/notify()/notifyAll()及生产者与消费者模型
- cocos2dx 创建精灵的5种方式
- 一句话来填坑(持续更新)
- Map遍历方法
- 【java线程系列】java线程系列之线程间的交互wait()/notify()/notifyAll()及生产者与消费者模型
- Observer模式
- PSBS主权评级风险资产质量差