@[zhuyitao123456](/user/532942) 能说一下你的思路吗
by EdenSky @ 2022-12-27 20:19:50
@[wanguan](/user/719577) 我用栈先模拟,然后将他放入一个数组中看合法的个数,因为)不入栈,所以(出栈的时候就让数组统计2次然后再依次遍历数组,看最长的合法长度,然后如果长度相等,数量就增加。
by ZYxxz @ 2022-12-27 20:24:51
@[wanguan](/user/719577) 还有那个位置不懂,问我,希望大佬给我提出更多的意见
by ZYxxz @ 2022-12-27 20:27:02
Hack `))))()())))`
by EdenSky @ 2022-12-27 20:56:52
@[zhuyitao123456](/user/532942)
by EdenSky @ 2022-12-27 20:57:11
@[zhuyitao123456](/user/532942) 看看我给你改的,AC
```cpp
#include <bits/stdc++.h>
using namespace std;
string s;
const int maxn = 1e6+5;
typedef pair<char,int> pci;
stack<pci> st;
int a[maxn],top,ans,gs,sum;
int main()
{
cin>>s;
s="#"+s;
for(int i=1;i<s.size();i++)
{
if(s[i]=='(')
st.push({s[i],i});//记录这是位置i的字符(
else if(!st.empty()&&st.top().first=='(')
{
a[st.top().second]=1;
a[i]=1;
st.pop();
}
}
for(int i=1;i<s.size();i++)
{
if(a[i]==1)
{
ans++;
if(ans>sum)
{
sum = ans;
gs = 1;
}
else if(ans == sum)
gs++;
}
else
ans = 0;
}
if(sum!=0)
cout<<sum<<" "<<gs;
else
cout<<"0"<<" "<<"1";
return 0;
}
```
[AC记录](https://www.luogu.com.cn/record/98125209)
by EdenSky @ 2022-12-27 21:26:38
你这里:
```cpp
else if(!st.empty())
{
st.pop();
a[++top] = 1;//这里看不懂,但确实有问题
a[++top] = 1;
}
else
a[++top] = 0
```
这里:
```cpp
if(ans!=0)
cout<<ans<<" "<<gs;
```
有问题
by EdenSky @ 2022-12-27 21:35:36
@[wanguan](/user/719577) 感谢大佬的帮助,已经弄懂了
by ZYxxz @ 2022-12-28 08:08:33
@[wanguan](/user/719577) 第二个确实是打错了,第一个是存入数组之内,应为(括号进来后,左括号出去的时候,那就一定会有一对合法的括号对。所以我一次性统计了2个进入数组。
by ZYxxz @ 2022-12-28 08:40:14
@[wanguan](/user/719577) 改了第二个错误地方之后 Hack 的点过了,但还是没有AC 很不理解
by ZYxxz @ 2022-12-28 08:46:27