HDU 4891 The Great Pan (字符串处理)
Posted cynchanpin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 4891 The Great Pan (字符串处理)相关的知识,希望对你有一定的参考价值。
求一串字符有多少种不同的意思,当中关心‘{’,‘}’之间的‘|’。
和‘$‘,‘$‘之间的空格,连续N个空格算N+1种。
AC代码:
#include<stdio.h> #include<string> #include<string.h> using namespace std; char s[2*1024*1024+10]; string ss; int cnt; int find(int x,int y) { int i,count=0; for(i=x;i<=y;i++) { if(ss[i]=='|') count++; } return count+1; } int find2(int x,int y) { int mark=0; int i,count=1,ret=1; for(i=x;i<=y;i++) { if(ss[i]==' ') { mark=1; count++; } else { if(mark==1) ret*=count; if(ret>100000) cnt=1; count=1; mark=0; } } return ret; } int main() { int len; int n,i; __int64 ans; while(scanf("%d",&n)!=EOF) { len=strlen(s); ss=""; cnt=0; ans=1; getchar(); for(i=0;i<n;i++) { gets(s); ss+=s; } int x,y,a,b; x=y=a=b=-1; for(i=0;i<ss.length();i++) { if(ss[i]=='{') a=i; if(ss[i]=='}') b=i; if(a!=-1 && b!=-1) { ans*=find(a,b); a=b=-1; } if(x==-1 && ss[i]=='$') { x=i; ss[i]='*'; } if(y==-1 && ss[i]=='$') y=i; if(x!=-1 && y!=-1) { ans*=find2(x,y); x=y=-1; } if(ans>100000) cnt=1; } if(cnt==1) printf("doge\n"); else printf("%I64d\n",ans); } return 0; }
以上是关于HDU 4891 The Great Pan (字符串处理)的主要内容,如果未能解决你的问题,请参考以下文章
HDU 4006The kth great number(K大数 + 堆)
HDU 4006: The kth great number