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 |
熟悉编译器的过来看一下,stable_sort换成sort就RE了参照例程写的,例程是用cstdlib里的qsort 我用sort一遇到大数据,例如第3个数据n=99就RE了,本地也一样 #include<iostream> #include<vector> #include<cstring> #include<queue> #include<stack> #include<map> #include<set> #include<algorithm> #include<numeric> #include<cstdio> #include<cmath> #include<cctype> using namespace std; #define FOR(i,n) for (int i=0;i<n;i++) #define FORI(i,s) for (int i=0;i<s.size();i++) #define BEND(x) (x).begin(),(x).end() #define FORALL(it,st) for(typeof(st.begin())it=st.begin();it!=st.end();it++) const int MAXN=1024; char a[MAXN*MAXN]; int p[MAXN*MAXN]; int c[MAXN]; char *prev; bool Cmp(int x,int y) { return strcmp(a+x,a+y)<=0; } int common(int x,int y) { int i; for(i=0;i<MAXN;i++) if(a[x+i]!=a[y+i]||!a[x+i]||!a[y+i]) return i; } int main() { int n,i,j,k,s,best,l,r,done=0; while(scanf("%d",&n)&&n) { if(done++) printf("\n"); k=0; for(i=s=0;i<n;i++,s+=MAXN) { scanf("%s",a+s); for(j=s;a[j];j++) p[k++]=j; } stable_sort(p,p+k,Cmp); ///就是这里导致RE的,换成sort的话 l=r=best=s=0; memset(c,0,sizeof(c)); while(r<k) { while(s<=n/2&&r<k) if(!c[p[r++]/MAXN]++) s++; while(s>n/2&&l<r) if(!--c[p[l++]/MAXN]) s--; if(l) best>?=common(p[l-1],p[r-1]); } if(best==0) { printf("?\n"); continue; } l=r=s=0; memset(c,0,sizeof(c)); prev=""; while(r<k) { while(s<=n/2&&r<k) if(!c[p[r++]/MAXN]++) s++; while(s>n/2&&l<r) if(!--c[p[l++]/MAXN]) s--; if(common(p[l-1],p[r-1])==best) if(strncmp(prev,a+p[l-1],best)) { prev=a+p[l-1]; for(j=0;j<best;j++) printf("%c",*(prev+j)); printf("\n"); } } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator