CF1101B Accordion

一道神仙题

0.0.01.png

总用时\(9.28s\)

Idea

  1. 找出最左边的\([:\)子串
  2. 找出最右边的\(:]\)子串
  3. 在中间找\(|\)的个数

So,真的不难

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<string>
#include<queue>
#define int long long
#define maxn 100001
#define inf 2147483647
#define mod 998244353
#define eps 1e-6
#define pi acos(-1.0)
#define de(x) ((x)*(x))
using namespace std; 
inline int read(){
    int x=0,f=1; char ch=getchar();
    while(!isdigit(ch)) {if(ch=='-')f=-1;ch=getchar();}
    while(isdigit(ch)) {x=x*10+ch-48;ch=getchar();}
    return x*f;
}
string s;
int len,l=-1,r=-1,bj;
signed main(){
    cin>>s;
    len=s.size();
    for(int i=0;i<len;++i)
        if(s[i]=='['){
            l=i;
            break;
        }
    if(l==-1) return puts("-1"),0;
    bj=l;
    for(int i=l+1;i<len;++i)
        if(s[i]==':'){
            l=i;
            break;
        }
    if(l==bj) return puts("-1"),0;
    for(int i=len-1;i>=0;--i)
        if(s[i]==']'){
            r=i;
            break;
        }
    if(r==-1) return puts("-1"),0;
    bj=r;
    for(int i=r-1;i>=0;--i)
        if(s[i]==':'){
            r=i;
            break;
        }
    if(r==bj) return puts("-1"),0;
    if(l>=r) return puts("-1"),0;
    int ans=4;
    for(int i=l+1;i<r;++i)
        if(s[i]=='|') ans++;
    printf("%d\n",ans);
    return 0;
}
posted @ 2019-09-06 14:45  云山乱  阅读(206)  评论(0编辑  收藏  举报