简单模拟,这里贴的是队友当时写的代码。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define maxn 1000007
char word[maxn];
char word2[maxn];
ll next(ll l,char w){
while(1){
if(word[l] == w) return l;
l++;
}
}
long long find(ll len){
ll i = 0;
ll ans =1;
for(;i < len; i++){
if(word[i] == '{'){
ll end = next(i+1,'}');
ll res = 1;
for(;i<end;i++)
if(word[i] =='|')res++;
ans*=res;
}
else if(word[i]=='$'){
ll end = next(i+1,'$');
for(;i<end;i++){
ll res = 1;
if(word[i]==' '){
while(word[i]==' '){
res++;
i++;
}
}
ans *= res;
if(ans > 100000) return -1;
}
}
if(ans > 100000) return -1;
}
return ans;
}
int main(){
int n;
while(scanf("%d",&n) != EOF){
getchar();
ll len1=0,len2 ;
for(int i = 0;i < n; i++){
gets(word2);
//cout<<word2<<endl;
len2 = strlen(word2);
for(int j = 0;j < len2; j++)
word[len1+j] = word2[j];
len1+=len2;
}
long long ans = find(len1);
if(ans == -1){
puts("doge");
}
else cout<<ans<<endl;
}
return 0;
}