Educational Codeforces Round 90 (Rated for Div. 2) 参与排名人数12840
[codeforces 1373C] Pluses and Minuses 找规律,难在+号会使数据发生跳跃,跳过了中间的+号
题目大意:给定一个包含'-','+'符号的字符串,自小到大,给出每次的前进动力(对应题目代码中的变量init),'-'会使前进的动力-1,'+'会使前进的动力+1,若前进动力小于0,此次前进中止,从头开始字符串的遍历,中止时的步数参与求和,求,能完成该字符串的遍历(走完字符串,并且,前进动力大于等于0),输出所有步数和。
样例模拟如下:
--+-
7
1.最开始动力是0
起始动力0
字符位置1 2 3 4
字符数值- - + -
结束动力-1
此次步数是1
2.最开始动力是1
起始动力1 0
字符位置1 2 3 4
字符数值- - + -
结束动力0 -1
此次步数是2
3.最开始动力是2
起始动力2 1 0 1
字符位置1 2 3 4
字符数值- - + -
结束动力1 0 1 0
此次步数是4
总的步数是1+2+4=7
---
9
1.最开始动力是0
起始动力0
字符位置1 2 3
字符数值- - -
结束动力-1
此次步数是1
2.最开始动力是1
起始动力1 0
字符位置1 2 3
字符数值- - -
结束动力0 -1
此次步数是2
3.最开始动力是2
起始动力2 1 0
字符位置1 2 3
字符数值- - -
结束动力1 0 -1
此次步数是3
4.最开始动力是3
起始动力3 2 1
字符位置1 2 3
字符数值- - -
结束动力2 1 0
此次步数是3
总的步数是1+2+3+3=9
++--+-
6
1.最开始动力是0
起始动力0 1 2 1 0 1
字符位置1 2 3 4 5 6
字符数值+ + - - + -
结束动力1 2 1 0 1 0
此次步数是6
总的步数是6
再举一例
1
++-+-
1.最开始动力是0
起始动力0 1 2 1 2
字符位置1 2 3 4 5
字符数值+ + - + -
结束动力1 2 1 2 1
此次步数是5
总的步数是5
AC代码如下:
#include
#include
#define maxn 1000010
#define LL long long
char s[maxn];
LL ans;
int main(){
int t,cur,i,n;
scanf("%d",&t);
while(t--){
scanf("%s",s+1);
n=strlen(s+1),cur=0,ans=0;
for(i&#61;1;i<&#61;n;i&#43;&#43;){
if(s[i]&#61;&#61;&#39;&#43;&#39;)cur&#43;&#43;;
else cur--;
if(cur<0)ans&#43;&#61;i,cur&#61;0;//i表示当前步数.i&#61;&#61;n时&#xff0c;要求cur>&#61;0&#xff0c;此判断语句不执行&#xff0c;之后ans&#43;&#61;n打了补丁。
}
ans&#43;&#61;n;//需要到达终点时,cur>&#61;0
printf("%lld\n",ans);
}
return 0;
}