Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2011, 19:44   #1
videolord
Пользователь
 
Аватар для videolord
 
Регистрация: 23.02.2011
Сообщений: 28
Печаль Как ускроить выполнение!

Возникли трудности с задачкой http://acm.timus.ru/problem.aspx?space=1&num=1196
как можно ускорить ато выводит Time limit exceeded on test 8 , Время работы 2.046,Выделено памяти 142 КБ

Код:
import java.io.*;
import java.util.Scanner;
public class problem1196 { 
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int sum=0;
int value=0;
int[] A=new int [n];
boolean[] map =new boolean[n];
for(int i=0;i<n;i++){
A[i]=sc.nextInt();
}
int m=sc.nextInt();
int[] B=new int[m];
for (int i=0;i<m;i++){
B[i]=sc.nextInt();
}
for (int i=0;i<m;i++){
value=B[i];     
 
if (BinarySearch(A,0,n-1,value)!=0)
sum++;
}
System.out.println(sum);
}
public static long BinarySearch(int[] Mas,int left,int right,int value){
int half;       
while(left<=right){
half=(left+right)/2;
if (value==Mas[half]) return Mas[half];
else if (value<Mas[half]) right=half-1;
else left=half+1;
}       
return 0;
}}
videolord вне форума Ответить с цитированием
Старый 04.04.2011, 22:14   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от videolord Посмотреть сообщение
Возникли трудности с задачкой http://acm.timus.ru/problem.aspx?space=1&num=1196
как можно ускорить ато выводит Time limit exceeded on test 8 , Время работы 2.046,Выделено памяти 142 КБ
Не используйте Scanner для чтения чисел, он производит конвертацию кодировок, что сильно замедляет считывание. И кстати, binarySearch реализовано в java.util.Arrays.
Код:
import java.io.*;
import java.util.Arrays;
 
public class Main {
    static int nextInt(BufferedReader reader) throws IOException {
        return Integer.parseInt(reader.readLine());
    }
 
    public static void main(String[] args) throws IOException {
 
        BufferedReader inp = new BufferedReader(new InputStreamReader(System.in));
        
        int teacherSize = nextInt(inp);
        int[] teacherYears = new int[teacherSize];
 
        for (int i = 0; i < teacherSize; i++)
            teacherYears[i] = nextInt(inp);
 
        int studentSize = nextInt(inp);
        int rightAnswersCount = 0;
 
        for (int i = 0; i < studentSize; i++)
            if (Arrays.binarySearch(teacherYears, nextInt(inp)) >= 0)
                rightAnswersCount++;
 
        System.out.println(rightAnswersCount);
    }
}
netrino вне форума Ответить с цитированием
Старый 04.04.2011, 23:01   #3
videolord
Пользователь
 
Аватар для videolord
 
Регистрация: 23.02.2011
Сообщений: 28
По умолчанию

Большое спасибо вам netrino !!!Мучаюсь уже 2 дня),выводит тайм лимит,то ли бинарный поиск с багами,а тут встроенный бин поиск!Круто!
videolord вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как прервать выполнение операции? iskurt Помощь студентам 9 29.03.2010 18:46
Как отменить выполнение процедуры? AK BULLETS Общие вопросы Delphi 0 25.03.2010 11:52
Как остановить выполнение макроса ? kzld Microsoft Office Excel 2 19.07.2009 13:16
Как зделать авто выполнение Editor Общие вопросы Delphi 5 27.04.2008 21:01
Как ускорить выполнение макросов tat-besidovska Microsoft Office Excel 1 22.01.2008 12:12