codeforce 459DIV2 C题
2024-10-21 05:09:17
题意
一串括号字符串,里面存在一些‘?’,其中‘?’既可以当作 '(' 又可以当作 ')' ,计算有多少对(l,r),在s中[sl,s(l+1),s(l+2),.....sr],内的括号是匹配的。n=strlen(s)<=5000。
分析
这个题还是卡了很久的,我果然是很菜的。
(错误思路)
一开始的时候想,用一个变量cur表示还未匹配的左括号 '(' ,用变量num记录‘?’的数量,‘?’尽量当右括号使用,在判断(l,r)是否匹配的时候从左往右扫,遇到'(' 的时候cur++,遇到 ')'cur--,如果最左边的字符是'?'那么直接将其变成'(' num--,cur++;因为它如果是')'不再有作用。当cur==num的时候说明当前长度是匹配的。如果num>cur,且(num-cur)%2==0则说明问好可以和‘(’匹配,剩下的‘?’自己互相匹配。
错误代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=+;
char s[maxn];
int n;
int main(){
scanf("%s",s);
n=strlen(s);
int ans=;
for(int i=;i<n;i++){
int cur=,num=;
if(s[i]==')')continue;
else cur++;
for(int j=i+;j<n;j++){
bool jud=;
if(s[j]=='(')cur++;
if(s[j]==')')cur--;
if(s[j]=='?')num++;
if(cur==&&num==)jud=;
else if(cur==&&num){cur++;num--;}
if(cur==num)jud=;
else if(num>cur&&(num-cur)%==)jud=;
if(jud)ans++;
}
}
cout<<ans<<endl;
return ;
}
思路纠正:
上面一开始我考虑最左边的'?'只能被当作(使用,可以在深入考虑一下,如果当前?的数量大于(的数量,那么多的?就只能被当作(使用否则没法匹配。这样可以消除对于右边的影响 "(??(()"也就是‘?’当作‘)’来匹配左边的‘(’。
正确代码:
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=+;
char s[maxn];
int n;
int main(){
scanf("%s",s);
n=strlen(s);
int ans=;
for(int i=;i<n;i++){
int cur=,num=;
if(s[i]==')')continue;
else cur++;
for(int j=i+;j<n;j++){
bool jud=;
if(s[j]=='(')cur++;
if(s[j]==')')cur--;
if(s[j]=='?')num++;
if(cur==&&num==)jud=;
else if(cur==&&num){cur++;num--;}
if(cur==num)jud=;
else if(num>cur&&(num-cur)%==)jud=;
if(jud)ans++;
}
}
cout<<ans<<endl;
return ;
}
最新文章
- 分布式之Zookeeper使用
- Mac OS X 10.10 Yosemite下面解决XAMPP无法开启mysql的问题
- Socket Programming in C#--Introduction
- 用css做类似表格的布局
- Android 屏蔽ScrollView滑动操作
- 安装ecshop提示“安装数据失败”或者“创建管理员帐号”
- Sublime编辑器的使用
- 微信小程序地图控件篇 ---自定义图标被地图覆盖的问题
- restful规范简要概述
- CRMEB客户管理+电商管理系统帮助文档,送给有需要的人
- 第三方jar上传至公司maven仓库(私库)解决办法
- _pvp_killed_loot
- C语言 &#183; 数组输出
- bugfree 数据库配置 显示No such file or directory
- Elasticsearch 常用基本查询
- bzoj3629 / P4397 [JLOI2014]聪明的燕姿
- git分支管理图
- Bzoj2152/洛谷P2634 聪聪可可(点分治)
- 《C++ Primer Plus》第8章 函数探幽 学习笔记
- img图片加载失败默认图片