Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для videolord
49 / 15 / 2
Регистрация: 20.02.2011
Сообщений: 152

Как ускроить выполнение!

04.04.2011, 20:18. Показов 1039. Ответов 6
Метки нет (Все метки)

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

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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;
}}
Добавлено через 1 минуту
Решал бинарным поиском

Добавлено через 38 минут
или кто нить может предложит другой алгоритм решения!Буду очень благодарен!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.04.2011, 20:18
Ответы с готовыми решениями:

Как ускорить выполнение кода? (Получение цвета пикселя, сравнение и выполнение действия)
Всем привет. Нужна консультация экспертов) Программа такая. Есть пиксель на экране, в нем то появляется яркий цвет, то темный (лампочка...

Возможно ли: выполнение подпрограммы в отдельном процессе, одновременное выполнение двух подпрограмм?
Всех приветствую :handshake: Пример @echo off call :PROG1 call :PROG2 exit /b :PROG1

Ставлю задержку на выполнение действий в цикле - задержка ставится почему то на выполнение всего скрипта
Здравствуйте! Код элементарный: $s = $_POST; $s = preg_replace('/ {2,}/',' ',$s); for ($i = 0; $i &lt; strlen($s);...

6
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
04.04.2011, 21:00
Вообще алгоритм приемлем: сложность O(n*log(n)) - при данных ограничениях должно спокойно проходить. Подозреваю, что вы просто криво написали бинпоиск и он на каких-то данных зацикливается.

Цитата Сообщение от videolord Посмотреть сообщение
2.046
Это не настоящее время выполнения, просто после этого момента программа была остановлена тестирующей системой, на самом деле программа могла работать бесконечно долго.

Можно использовать встроенный бинпоиск
http://download.oracle.com/jav... ng.Object)
(Для этого придется предварительно воспользоваться методом Arrays.asList для получения List, соответствующего массиву в котором ищем)

Можно решить с помощью Set.

Но проще всего решить за O(k), где k - максимально возможное значение числа (10^6).
Java
1
2
3
4
5
6
7
boolean []b = new boolean[1000000];
for(int i = 0; i < n; i++)
  b[in.nextInt()] = true;
...
for(int i = 0; i < m; i++)
  if(b[in.nextInt()])
    ans++;
Рекомендую решить всеми предложенными способами.
В первую очередь - отладить ваш бинпоиск, я думаю там бага.

Добавлено через 4 минуты
Сделайте так, чтобы значение right было всегда строго больше максимально возможного индекса ответа. Обычно так проще пишется.
Вызов будет выглядеть binarySearch(A,0,n,value).
Методы называйте с маленькой буквы.
0
 Аватар для videolord
49 / 15 / 2
Регистрация: 20.02.2011
Сообщений: 152
05.04.2011, 13:36  [ТС]
Scanner долго работает,заменил и получил свой Accepeted!
И еще решил встроенным бин поиском
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.io.*;
public class problem1196 { 
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 n=nextInt(inp);
int sum=0;
int value=0;
int[] A=new int [n];
for(int i=0;i<n;i++){
A[i]=nextInt(inp);
}
int m=nextInt(inp);
int[] B=new int[m];
for (int i=0;i<m;i++){
B[i]=nextInt(inp);
}
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;
}}
Добавлено через 5 минут
Написал как и вы подсказали Хохол вторым способом за O(k), где k - максимально возможное значение числа (10^6).Но выводит Crash on test 5 !!!

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.io.*;
public class prob1196 {
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));
boolean []b = new boolean[1000000];
int n=nextInt(inp);
int ans=0;
for(int i = 0; i < n; i++)
b[nextInt(inp)] = true;
int m=nextInt(inp); 
for(int i = 0; i < m; i++)
if(b[nextInt(inp)])
ans++;
System.out.println(ans);
}
}
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
05.04.2011, 14:31
Да, Scanner медленно работает, об этом я не подумал.
А сейчас у вас выход за границы массива при числе 1000000.
0
 Аватар для videolord
49 / 15 / 2
Регистрация: 20.02.2011
Сообщений: 152
05.04.2011, 15:37  [ТС]
никак не могу избавиться от crash!?Как избавиться?Или этод метод не работает эдесь?
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
05.04.2011, 16:30
Я вроде ясно написал.
0
 Аватар для videolord
49 / 15 / 2
Регистрация: 20.02.2011
Сообщений: 152
05.04.2011, 21:19  [ТС]
а какое число задать чтоб не выходил?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.04.2011, 21:19
Помогаю со студенческими работами здесь

не понимаю как это работает, выполнение PHP как бы в строке, например:
переменная = переменная ? переменная : (переменная &gt; переменная ? переменная : переменная : ''); там еще штмл подмешан как...

Как досрочно заврешить выполнение скрипта? Как сбросить переменные сессии?
1. Как досрочно заврешить выполнение скрипта? 2. Как сбросить переменные сессии?

Много синхронных действий как отследить выполнение последнего? Как их сделать друг за другом в несколько поток
Много синхронных действий как отследить выполнение последнего? Как их сделать друг за другом в несколько потоков? Нужно совершить 100...

Как прервать выполнение программы?
Здравствуйте. Необходимо прервать выполнение программы, но чтобы при этом форма не закрылась. У меня очень много функций и по этому return...

Как остановить выполнение батника?
Друг решил угарнуть и кинул мне ватник @echo :start echo Petyshara! &gt; Petyshok%random%.txt goto startи теперь даже при перезапуске...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru