普通字符串题,条件较弱,注意上行行末的空格与下行行首的空格是连续的,不可割裂。
代码:
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <stack>
#define len 1000100
#define maxx 100000
using namespace std;
char s[1004][len];
char s1[10];
stack<char> st1,st2,st3;
int main()
{
//freopen("1005.in","r",stdin);
//freopen("output.txt","w",stdout);
int n,sum1,sum2,flag1,flag2,mark,over;
__int64 ans1,ans2,ans3;
while(scanf("%d",&n)!=EOF)
{
flag1=flag2=0;
mark=over=0;
sum1=sum2=0;
ans1=ans2=ans3=1;
gets(s1);
for(int i=0; i<n; ++i)
{
gets(s[i]);
}
for(int i=0; i<n; ++i)
{
for(int j=0; s[i][j]!='\0'; ++j)
{
if(!flag1)
{
if(s[i][j]=='{')
flag1=1;
}
else
{
if(s[i][j]=='|')
{
sum1+=1;
}
else if(s[i][j]=='}')
{
flag1=0;
sum1+=1;
ans1*=sum1;
sum1=0;
if(ans1>maxx)
break;
}
}
if(!flag2)
{
if(s[i][j]=='$')
flag2=1;
}
else
{
if(s[i][j]!=' '&&sum2!=0)
{
sum2+=1;
ans3*=sum2;
if(ans3>maxx)
mark=1;
sum2=0;
}
else if(s[i][j]==' ')
{
sum2++;
}
if(s[i][j]=='$')
{
flag2=0;
if(mark==1)
{
over=1;
break;
}
else
ans2=ans3;
}
}
}
if((ans1>maxx&&(!flag1))||over)
break;
}
if(max(ans1,ans2)>maxx||(ans1*ans2>maxx)||over)
printf("doge\n");
else
printf("%I64d\n",ans1*ans2);
}
return 0;
}