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