一道神仙题 喏
总用时(9.28s)
Idea
- 找出最左边的([:)子串
- 找出最右边的(:])子串
- 在中间找(|)的个数
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
",ans);
return 0;
}