Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:为什么用指针就可以对,用变量模拟指针就会WA呢?In Reply To:为什么用指针就可以对,用变量模拟指针就会WA呢? Posted by:litble at 2017-08-14 21:23:24 > 诚恳地求大神帮助,感激不尽!QAQ > 我是用hash实现本题的,但是一直都WA,于是我找了别人的代码来看,这样就可以AC: > #include<algorithm> > #include<iostream> > #include<cstring> > #include<climits> > #include<cstdio> > using namespace std; > int T,t; > char s[2][3100],l1,l2; > char *p; > int h1,h2,hx[11000]; > int has(int dep){ > int re=hx[dep+5000]; > while(*p&&*p++=='0')//指针模拟,实现递归 > re=(re+hx[dep]*has(dep+1))%19001;//计算每棵子树的hash值 > return re*re%19001; > } > void init(){for(int i=0;i<=10000;++i)hx[i]=rand()%19901;}//随机一些hash种子 > int main() > { > scanf("%d",&T);init(); > while(T--){ > scanf("%s%s",s[0],s[1]); > p=s[0];h1=has(1);p=s[1];h2=has(1); > if(h1==h2)puts("same"); > else puts("different"); > } > return 0; > } > 我原来的WA代码是这么写的: > #include<algorithm> > #include<iostream> > #include<cstring> > #include<climits> > #include<cstdio> > using namespace std; > int T,t; > char s[2][3100],l1,l2; > int h1,h2,hx[11000]; > int has(int x,int dep,int l){ > int re=hx[dep+5000]; > while(t<l&&s[x][t++]=='0')//用全局变量t实现移动,只有这里和上一份代码不同 > re=(re+hx[dep]*has(x,dep+1,l))%19001; > return re*re%19001; > } > void init(){for(int i=0;i<=10000;++i)hx[i]=rand()%19901;} > int main() > { > init(); > scanf("%d",&T); > while(T--){ > scanf("%s%s",s[0],s[1]); > l1=strlen(s[0]),l2=strlen(s[1]); > t=0,h1=has(0,1,l1),t=0,h2=has(1,1,l2); > if(h1==h2)puts("same"); > else puts("different"); > } > return 0; > } 对了,我WA的那份代码那个位置改成这样就可以过了: while(s[x][t++]=='0') re=(re+hx[dep]*has(x,dep+1))%19001; Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator