好无奈的多校啊!!!!!!看着这么复杂的签到题,在前面四个小时都是无视掉的。
。
。。。。。
题意非常难懂有木有!!
!
!!
!。
就是输入一串非常长的文章,详细多长我也不清楚!
。!
推断它有几个意思。!
!!
当中有两种情况造成它有多种意思!!!
一、{A|B|C}。表示这句话要么是A的意思,要么是B的意思,要么是C的意思,题目保证不会出现同样的意思,
那么这个就比較好操作,就是统计{}里面有多少个“|”就能够了。意思的种类就是“|”数目加1。
二、$ c a b $,这句话主要是受到空格的影响导致多种意思。当中有连续多个空格时。不同数量的空格也会造成不同的意思!所以又一个空格就会产生2种意思。两个就会产生3种,以此下去。最后垒乘即可了,当中“\n”不影响空格的连续!
!
!
!
题意懂了。这题就不是非常难了。是个复杂点的字符串处理。
因为不清楚输入,我用的是getchar输入。
AC代码例如以下:
#include<iostream>
#include<cstring>
#include<cstdio>
#define ll long long
using namespace std;
int main()
{
ll n;
char c;
while(~scanf("%I64d",&n))
{
ll dk=0,flag=0,bbj=0;
ll last1=1,suml,summ,last2=1,bj;
getchar();
for(ll i=0;i<n;++i){
while((c=getchar())!='\n'){
if(c=='{')
{
dk=1;
suml=0;
}
if(dk==1)
{
if(c=='|')
suml++;
}
if(c=='}')
{
dk=0;
last1=last1*(suml+1);
if(last1>100000)
bbj=1;
}
if(c=='$'&&flag==0) {flag=1;summ=0;continue;}
if(flag==1)
{
if(c==' '&&bj==0) {summ=1;bj=1;}
else if(c==' '&&bj==1)
{
summ++;
}
if(c!=' '&&c!='\n')
{
last2=last2*(summ+1);
summ=0;bj=0;
}
if(last2>100000)
bbj=1;
}
if(flag==1&&c=='$') flag=0;
}
}
if(bbj)
printf("doge\n");
else
{
ll ans = last1 * last2 ;
if(ans>100000)
printf("doge\n");
else printf("%I64d\n",ans);
}
}
return 0;
}