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 |
高手帮看看,怎么TLE了?有什么办法改进,先谢谢了!!C++#include <iostream> #include <cstring> #include <string> using namespace std; void exchange(char*&a) { char* res = new char[8]; for(int i=0,j =0;i<(int)strlen(a);i++) { if(a[i]!='-') {res[j]=a[i];j++;} } res[7] = '\0'; int m = 0,k = 0; for(int i=0;i<7;i++) { if(res[i]>='A'&&res[i]<='Z') { m = res[i]-'A'; k = m/3; if(m<=14) { res[i] = k+2+'0';} else if(m>=15&&m!=16&&m<=18) { res[i] = 7+'0';} else if(m>=19&&m<=21) { res[i] = 8+'0';} else { res[i] = 9+'0';} } } delete []a; a = new char[8]; strcpy(a,res); delete []res; } int split(char* x[],int first,int last) { int split_point; char* pivot = new char[strlen(x[first])+1]; strcpy(pivot,x[first]); split_point = first; for (int unknown = first +1;unknown <=last; unknown++) if (strcmp(x[unknown],pivot)<0) { split_point++; char* t= x[split_point]; x[split_point] = x[unknown]; x[unknown] = t; } x[first] = x[split_point]; x[split_point] = pivot; return split_point; } void quick_sort( char* x[],int first,int last) { if(first<last) { int split_point; split_point = split(x,first,last); quick_sort(x,first,split_point-1); quick_sort(x,split_point+1,last); } } int main() { int sum; cin>>sum; char** arr = new char*[sum]; int i = 0; for( i=0;i<sum;i++) { arr[i] = new char[100]; cin>>arr[i]; exchange(arr[i]); } //计算循环次数 int* num = new int[sum]; for(i = 0;i<sum;i++) num[i] = 1; int j =0; for(i =0;i<sum;i++) { for(j=i+1;j<sum;j++) { if(num[j]==1) { if(strcmp(arr[i],arr[j])==0) { num[i]++; num[j] = -1; } } } } int k = 0; for(i = 0;i<sum;i++) { if(num[i]>1) k++; } char** result = new char*[k]; j = 0; // for(i=0;i<sum;i++) { if(num[i]>1) { result[j] = new char[9]; strcpy(result[j],arr[i]); result[j][7] = num[i] + '0'; result[j][8] = '\0'; j++; } } //delete delete []num; for(i=0;i<sum;i++) delete []arr[i]; delete []arr; quick_sort( result,0,k-1); if(k==0) { cout<<"No duplicates."<<endl; for(i=0;i<k;i++) delete [](result[i]); delete []result; return -1; } else { for(i=0;i<k;i++) { for(j=0;j<3;j++) { cout<<result[i][j];} cout<<"-"; for(j=3;j<7;j++) { cout<<result[i][j];} cout<<" "; cout<<result[i][7]<<endl; } for(i=0;i<k;i++) delete [](result[i]); delete []result; return 0; } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator