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 |
spj就是答案可能不唯一,符合要求就行,还有,这题有CaseTimeLimit,2000ms,你第一个点就超时了In Reply To:什么是 Special Judged ,为什么测出的时间是 2015MS ,还是 Time Limit Exceed Posted by:IceAngel at 2005-05-16 20:13:29 > Source > > Problem Id:2004 User Id:IceAngel > Memory:472K Time:2015MS > Language:C++ Result:Time Limit Exceed > > Source > > #include "iostream.h" > #include "string.h" > > #define wordMax 21 > #define lineMax 10000 > > char graph[lineMax][wordMax]; > long map[wordMax][lineMax] = { 0 }; > long num[wordMax] = { 0 }; > long caseLen[wordMax][lineMax] = { 0 }; > long caseMap[wordMax][lineMax] = { 0 }; > long wordsNum; > long caseNum; > > bool canBeChoose( long pre , long curr ) > { > int preL = strlen( graph[pre] ); > int currL = strlen( graph[curr] ); > > char str[wordMax]; > strcpy( str , graph[curr] ); > //如果 curr 与 pre 的长度之差不是1,显示不能构成链 > if( currL - preL != 1 ) > return false; > > int i , j; > bool f; > for( i = 0 ; i < preL ; i++ ) > { > //判断 pre 中的第i个字符是否在 curr 中出现 > f = false; > for( j = 0 ; j < currL && !f ; j++ ) > if( graph[pre][i] == str[j] ) > { > str[j] = 0; > f = true; > } > if( !f ) > return false; > } > return true; > } > > int main() > { > char str[wordMax]; > long len; > long i , j , k; > > wordsNum = 0; > while( cin >> str ) > { > strcpy( graph[wordsNum] , str ); > > len = strlen( str ); > map[len-1][num[len-1]] = wordsNum; > num[len-1]++; > > wordsNum++; > } > for( i = 1 ; i < wordMax ; i++ ) > { > for( j = 0 ; j < num[i] ; j++ ) > { > for( k = 0 ; k < num[i-1] ; k++ ) > { > //cout<<graph[map[i-1][k]]<<"\t"<<graph[map[i][j]]<<endl; > if( canBeChoose( map[i-1][k] , map[i][j] ) && caseLen[i-1][k] >= caseLen[i][j] ) > { > caseLen[i][j] = caseLen[i-1][k] + 1; > caseMap[i][j] = k; > } > } > } > } > > long myMaxLen = 0; > long myX; > long myY; > > for( i = wordMax - 1 ; i >= 0 ; i-- ) > { > for( j = 0 ; j < num[i] ; j++ ) > if( caseLen[i][j] > myMaxLen ) > { > myMaxLen = caseLen[i][j]; > myX = i; > myY = j; > } > } > for( i = myMaxLen ; i >= 0 ; i-- ) > { > num[i] = map[myX][myY]; > myY = caseMap[myX][myY]; > myX--; > } > for( i = 0 ;i <= myMaxLen ; i++ ) > { > cout<<graph[num[i]]<<endl; > } > return 0; > } > Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator