求助 WA了一个点,挺离谱的。

CF5C Longest Regular Bracket Sequence

@[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


|