Educational Codeforces Round 90 (Rated for Div. 2)C. Pluses and Minuses 题解(思维)

    技术2023-07-10  107

    题目链接

    题目大意

    就是执行这个伪代码

    res = 0 for init = 0 to inf cur = init ok = true for i = 1 to |s| res = res + 1 if s[i] == '+' cur = cur + 1 else cur = cur - 1 if cur < 0 ok = false break if ok break

    Ⅰ.当cur小于0时会终止当前for循环,然后cur初始值加一,重新开始一遍

    Ⅱ.当cur始终大于0时会跑满for循环,然后直接退出程序Ⅱ.当cur始终大于0时会跑满for循环,然后直接退出程序Ⅱ.当cur始终大于0时会跑满for循环,然后直接退出程序

    题目思路

    主要是要发现每次break的位置符合递增。

    代码

    #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e6+5; const int mod=1e9+7; int t,a,b,c; char s[maxn]; int main(){ scanf("%d",&t); while(t--){ scanf("%s",s+1); int d=strlen(s+1),pre=0,mi=0; ll ans=0; for(int i=1;i<=d;i++){ if(s[i]=='+'){ pre++; }else{ pre--; } if(pre<mi){ mi=pre; ans+=i; } } ans+=d;//序列全部执行 printf("%lld\n",ans); } return 0; }
    Processed: 0.009, SQL: 10