题目链接:http://codeforces.com/contest/918/problem/C

题目大意:给你一串字符串,其中有'('、')'、'?'三种字符'?'可以当成'('或者')'来用,问该字符串中有多少子串符合括号匹配的规则。

解题思路:根据括号匹配原始版进行改进,设置high和low分别表示未匹配左括号数的上限和下限,当遇到'('时low++,high++,遇到')'时low--,high--,遇到'?'时由于既可以表示'('又可以表示')',所以high++,low--。

原始版括号匹配(top为未匹配左括号数):

 bool check(string s) {
int top = ;
for(int i = ; i < s.size(); ++i) {
if(s[i] == '(') top++;
else top--;
if(cnt < ) return false;
}
return cnt == ;
}

本题代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int main(){
int low,high,size;
string str;
cin>>str;
size=str.size();
int ans=;
for(int i=;i<size;i++){
low=high=;
for(int j=i;j<size;j++){
if(str[j]=='(') high++,low++;
if(str[j]==')') high--,low--;
if(str[j]=='?') high++,low--;
if(high<)
break;
if(low<) low=;
if((j-i)%&&low==)
ans++;
}
}
printf("%d\n",ans);
return ;
}

最新文章

  1. WIX 安装部署教程(六) 为你收集的七个知识点
  2. git 放弃本地修改 强制更新
  3. c语言 struct 的初始化
  4. java万物皆对象
  5. hdu 1172 猜数字(暴力枚举)
  6. C++输入输出流的重载
  7. ip接口调用
  8. 通过xslt把xml转换成html
  9. aptana 插件离线下载方式
  10. 如何在myeclipse有个项目文件很多,我想找一段代码,怎么查找?
  11. 关于window.history.back()后退问题
  12. Leetcode 27——Remove Element
  13. HTTP协议7之Cookie--转
  14. Android BitmapUtils工具类
  15. 作为php了解一下共享内存的概念及优缺点
  16. 临时调用call()与apply()方法
  17. Memcached Java Client比较
  18. 浅析Oracle 12c中Data Guard新特性
  19. 淘宝--印风 专注于MySQL内核代码
  20. Kafka消费者生产者实例

热门文章

  1. WildFly8(JBoss)默认web服务器-------Undertow
  2. Ajax+Js局部刷新
  3. Codeforces 576C. Points on Plane(构造)
  4. BNU-2017.7.4排位赛2总结
  5. (转) 使用vivado创建工程 1
  6. js-之闭包的理解
  7. Spring Boot 使用IntelliJ IDEA创建一个web开发实例(三)
  8. 深入理解Spring系列之一:开篇
  9. 多线程中的超时, 如Socket超时
  10. Mysql储存过程7: case