Witam, staram się rozwiązać zadanie na SPOJ (NAMES), ma ograniczenie czasowe 5 s. Mój program wyświetla dobre wyniki, jednak nie mieści się w tym czasie. Poniżej zamieszczam to zadanie zrobione na dwa sposoby. Czy możecie mi powiedzieć, czy da się np. szybciej wczytywać dane? Już dużo godzin nad tym spędziłem i nic. Z góry dziękuję za pomoc.
import java.util.*;
import java.io.*;
public class Main
{
public static class Imie
{
String imie;
int il;
public Imie(String tab)
{
imie=new String(tab);
il=1;
}
public String toString()
{
return imie+" "+il;
}
public boolean equals(Object im)
{
Imie i=(Imie)im;
return i.imie.equals(imie);
}
}
public static class Komparator implements Comparator<Imie>
{
public int compare(Imie s1, Imie s2)
{
if(s1.il<s2.il) return 1;
else if(s1.il>s2.il) return -1;
else return s1.imie.compareTo(s2.imie);
}
}
public static void main(String[] args)throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)),true);
StringBuilder temp=new StringBuilder();
int tmp='a';
List<Imie> list=new ArrayList<Imie>();
String test;
while(in.ready())
{
in.read();in.read();in.read();in.read();
while(tmp!=' ')
{
tmp=in.read();
}
while(in.ready() && (tmp=in.read())!='\n')
{
temp.append((char)tmp);
}
Imie pom=new Imie(temp.toString().toUpperCase());
if(!list.contains(pom)) list.add(pom);
else
{
list.get(list.indexOf(pom)).il++;
}
temp.setLength(0);
}
Collections.sort(list,new Komparator());
for(Imie el: list)
{
out.println(el);
}
}
}
import java.io.*;
import java.util.*;
public class Main
{
public static class Imie implements Comparable<Imie>
{
String imie;
int il;
public Imie(String tab)
{
imie=tab;
il=1;
}
public String toString()
{
return imie+" "+il;
}
public boolean equals(Object im)
{
Imie i=(Imie)im;
return i.imie.equals(imie);
}
public int compareTo(Imie im)
{
if(il<im.il) return 1;
else if(il>im.il) return -1;
else return imie.compareTo(im.imie);
}
}
public static void main(String[] args)throws IOException
{
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)),true);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StreamTokenizer st = new StreamTokenizer(br);
List<Imie> list=new LinkedList<Imie>();
Imie temp;
String pom;
while(br.ready())
{
st.nextToken();
st.nextToken();
st.nextToken();
temp=new Imie(st.sval.toUpperCase());
if(list.contains(temp))
{
list.get(list.indexOf(temp)).il++;
}
else
{
list.add(temp);
}
}
Collections.sort(list);
for(Imie el: list)
{
out.println(el);
}
}
}