题意就是有一些人进进出出,求最少几个人就能完成这些“进进出出”。比如样例中的+-+-+,最少1个人就能完成这件事,因为一个人出去了,最少人数的情况下还是这个人进来,再这个人出去,再这个人进来,出去,一个人就行了。另一个样例“---”就至少需要三个人了,因为一个人不可能出去了又出去,除非这个人先回来。
这道题画图是一个很好的辅助,再看一组数据“+-++-++-----”。画成图形如下,纵坐标是人数。最高处减去最低处,也就是这个曲线的宽度,就是答案。如果还没理解的话,试着画出这组数据“++++++---++--+”,取到答案以后,其他波动的地方用这些人数来应付绰绰有余。
这道题画图是一个很好的辅助,再看一组数据“+-++-++-----”。画成图形如下,纵坐标是人数。最高处减去最低处,也就是这个曲线的宽度,就是答案。如果还没理解的话,试着画出这组数据“++++++---++--+”,取到答案以后,其他波动的地方用这些人数来应付绰绰有余。
#include<iostream> #include<cstdio> using namespace std; char s[310]; int main() { int n; int max,min; while(~scanf("%s",s)) { n = 0; min = max = 0; for(int i = 0 ; s[i] != '\0'; i ++) { if(s[i] == '+') n ++; else n --; if(n < min)min = n; if(n > max)max = n; } printf("%d\n",max - min); } return 0; }