5 条题解
-
3
可以参考一下这道题:CF26B
直接遍历括号串,用 表示当前未匹配的左括号,用 表示最长匹配括号串的长度。如果遇到左括号就将 ,如果遇到右括号并且前面还有未匹配的左括号(),就将 ,并将 。
最终答案就是 。
#include <bits/stdc++.h> #define ll long long #define rll register ll #define cll const ll #define N 10000005 using namespace std; inline ll read() { rll x=0;bool f=1;register char c=getchar(); while(c<48||c>57){if(c=='-') f=0;c=getchar();} while(c>=48&&c<=57){x=x*10+(c^48);c=getchar();} return f?x:-x; } inline void write(ll x) { if(x<0) putchar('-'),x=-x; if(x>9) write(x/10); putchar(x%10+48); } ll n,cnt,ans; char s[N]; int main() { scanf("%s",s+1),n=strlen(s+1); for(rll i=1;i<=n;i++) { if(s[i]=='(') cnt++; else if(cnt) ans+=2,cnt--; } write(n-ans); return 0; }
-
0
思路很简单,检测到是"("就加入栈,是")"就pop()
需要注意
当多出"("时,该怎么办······
当多出")"时,该怎么办······#include <iostream> #include <stack> using namespace std; long long sum;//记录答案 long long num;//t数组的数量 long long b;//不知道为什么a.length()放在for循环里就不行了 string a; stack <char> t; int main() { cin >> a; b = a.length(); for(int i = 0;i < b;i++)//遍历字符串a { if(a[i] == '(') { t.push(a[i]); num++; } else { if(t.empty()) { sum++; } else { t.pop(); num--; } } } sum += num; cout << sum; return 0; }
-
-4
写题解请注意
鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
- 1
信息
- ID
- 1415
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 221
- 已通过
- 95
- 上传者