i was solving the problem
https://www.spoj.pl/problems/PHONELST/
and got TLE....somebody suggest some faster method
#include<iostream>
#include<cstdio>
#include<vector>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
int compare(int n1,int n2)
{
if(n1==n2)
return 1;//prefix is present print NO in this case
int s1=log10(n1);
int s2=log10(n2);
while(s1)
{
int t1=n1/pow(10.0,s1);
int t2=n2/pow(10.0,s2);
if(t1==t2)
{
s1--;s2--;
}
else
{
return 0;//not a prefix....that is what we want
}
}
n2=n2/pow(10.0,s2);
//after while loop i am checking the last position of smaller number and
that position of the larger number
if( (n1%10)==(n2%10) )
return 1;//prefix is present print NO in this case
else
return 0;
}
int main()
{
int tc,flag;
scanf("%d",&tc);
while(tc--)
{
vector<int> v;
int n;
int temp;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&temp);
v.push_back(temp);
}
sort(v.begin(),v.end());
vector<int>::iterator i,j;
int k,l;
for(i=v.begin(),k=0; k<n-1; k++,i++)
{
for(j=i,l=k+1;l<n;l++)
{
j++;
flag=compare(*i,*j);
if(flag==1)
{
printf("NO\n");
break;
}
}
if(flag==1)
break;
}
if(flag==0)
printf("YES\n");
}
return 0;
}
--
Amol Sharma
Third Year Student
Computer Science and Engineering
MNNIT Allahabad
--
You received this message because you are subscribed to the Google Groups
"Algorithm Geeks" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/algogeeks?hl=en.