您的位置:首页 > 其它

Codeforces 918C - The Monster (贪心 + 思维 + 栈模拟)

2018-01-31 13:12 387 查看
思路:

首先明确题意:找符合要求的区间个数

很容易想到利用栈的括号匹配,枚举区间进行判断,此题多了问号的判断。

括号匹配不用栈的实现
bool check(string s) {
int top = 0;
for(int i = 0; i < s.size(); ++i) {
if(s[i] == '(') top++;
else top--;
if(cnt < 0) return false;
}
return cnt == 0;
}
由此改进出此题的解法
#include <iostream>
#include <string>

using namespace std;

int main() {
string s;
cin >> s;
int ans = 0;
for(int i = 0; i < s.size(); ++i) {
int low = 0, high = 0;  //top's range
for(int j = i; j < s.size(); ++j) {
if(s[j] == '(') low++, high++;
else if(s[j] == ')') low--, high--;
else low--, high++;
if(high < 0) break;
if(low < 0) low = 0;    //注意top小于0时需要把问号匹配
if(((j - i) & 1) && low == 0) {
ans++;
}
}
}
cout << ans << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: