powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Быстрое чтение и разбор файла
25 сообщений из 158, страница 5 из 7
Быстрое чтение и разбор файла
    #39405157
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПережал до 320. Над циклом вывода сильно не думал. Может там ещё что-то можно почикать...

Код: 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.
class Main{
    public static void main(String[] x) throws Exception {
        byte[] a = new byte[201];
        int b, v = 0, n = 1;
        while (System.in.read() != 10);
        for(;;){
            b = System.in.read();
            if(b == 45) {
                n = -1;
            } else if(b >= 48 & b <= 57){
                if(v > 0){
                    v *= 10;
                }
                v += b - 48;
            } else {
                v *= n;
                a[v + 100]++;
                v = 0;
                n = 1;
                if(b < 0) break;
            }
        }
        for (b = -1; b++ < 200;) {
            for (v = 0; v++ < a[b];) {
                System.out.print(b - 100 + ' ');
            }
        }
    }
}



1 Wrong answer 0,215 157 Кб

где то ошибка в алгоритме .
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405158
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Код: java
1.
                System.out.print(b - 100 + ' ');


Косячок-с.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405162
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1где то ошибка в алгоритме .
При компрессии налажал с чаром. Но что в первом варианте не так было не врублюсь. Мои тесты нормально сортирует :(.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405168
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПри компрессии налажал с чаром. Но что в первом варианте не так было не врублюсь. Мои тесты нормально сортирует :(.
Кажется дошло. Просто я тупой.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405188
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
class Main{
    public static void main(String[] x) throws Exception {
        int[] a = new int[201];
        int b, v = -1, n = 1;
        while (System.in.read() != 10);
        for(;;){
            b = System.in.read();
            if(b == 45) {
                n = -1;
            } else if(b >= 48 & b <= 57){
                v = v >= 0 ? v * 10 : 0;
                v += b - 48;
            } else if(v >= 0){
                v *= n;
                a[v + 100]++;
                v = -1;
                n = 1;
            }
            if(b < 0) break;
        }
        for (b = -1; b++ < 200;)
            for (v = 0; v++ < a[b];)
                System.out.print(b - 100 + " ");
    }
}



Можно попробовать ещё знак n упаковать в значение v. Но вряд ли получится меньше кода.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405201
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
313! А память там реально от балды считается. Прыгает от 7,5 до 9,5 на идентичном коде.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405227
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
307 и я уже заколебался.
Код: 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.
class Main{
    public static void main(String[] x) throws Exception {
        int[] a = new int[201];
        int b = 1,v = 0, n = 0;
        while (System.in.read() != 10);
        for(;b > 0;){
            b = System.in.read();
            if(b >= 48){
                v = v * 10;
                v += b - 48;
                n = n < 0 ? n : 1;
            } else if(b == 45) {
                n = -1;
            } else if(n != 0){
                v *= n;
                a[v + 100]++;
                v = n = 0;
            }
        }
        for (b = -1; b++ < 200;)
            for (v = 0; v++ < a[b];)
                System.out.print(b - 100 + " ");
    }
}


Если у кого есть идеи куда дальше ужимать - с радостью выслушаю.
Второй цикл можно через while написать, длинна выходит точно такая же. От третьего условия избавится не получилось, хотя есть чувство, что можно. Не выяснил ещё есть ли в тестах хвостовой пробел. Возможно с этим знанием можно как-то условия сократить.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405252
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЕсли у кого есть идеи куда дальше ужимать - с радостью выслушаю.
Проблема блин в System.out - у меня медленный. (Чисто печать - разбор и на стримсах копейки по времени).
Из-за двухбайтовой кодировки - одного SB + оно же напечатать - много.

P.S.
Код: java
1.
2.
v *= n;
a[v*n + 100]++;
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405264
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев
Код: java
1.
2.
v *= n;
a[v*n + 100]++;


Вот спасибо! Этот инлайн я провтыкал. У меня ещё на счёт вывода есть идеи, но с наскока не получилось сократить.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405313
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, да тут ещё выкидывать и выкидывать. Оба умножения я провтыкал. В выводе можно одну переменную вообще выкинуть. Попробую завтра до 300 добить.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405314
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczУ меня ещё на счёт вывода есть идеи, но с наскока не получилось сократить.
Еще символ хотел выкинуть?
Код: java
1.
for (;v<201;) if(a[v]-->0) System.out.print(v-100+" "); else v++;
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405335
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но это чертовски медленно, а ускорение, по типу
Код: java
1.
2.
3.
String s="";
for (;v<201;) if(a[v]-->0){if(++b%9==0){System.out.print(s);s="";}s+=v-100+" ";}else v++;
System.out.print(s);


требует много символов :(

Есть вариант String не объявлять, но требует хотя бы одного параметра при вызове. :)
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405337
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

Да, так и сделал. Хочу ещё первый цикл выкинуть, так как он длинный. Но слишком много новых условий выходит.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405338
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
298!
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405341
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1
Код: java
1.
            Arrays.stream(s.split(" ")).mapToInt(Integer::parseInt).parallel().sorted().forEachOrdered(x->out.print(x + " "));


Не позорься.

Когда ты писал хакатоны со Streams - то это было респектабельно и красиво. И я тебя уважал. Но перфрманс - это явно не твоё.

split никогда не работал эффективно. Если ты хочешь производительность - то
никаких аллокаций и сплитов. Пили свой FSM и парсер текстового стрима.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405345
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
287 после слияния циклов чтения.
Код: 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.
class Main{
    public static void main(String[] x) throws Exception {
        int[] a = new int[201];
        int b=0,v=0,n=9;
        for(;b > -1;){
            b = System.in.read();
            n = b == 10 ? 0 : n;
            if(n<9)
            if(b >45){
                v *=10;
                v += b - 48;
                n = n < 0 ? n : 1;
            } else if(b == 45) 
                n = -1;
             else if(n != 0){
               a[v *n+ 100]++;
                v = n = 0;
            }
        }
        for ( ; n++ < 201;)
            for (; a[n-1]-->0;)
                System.out.print(n - 101 + " ");
    }
}


И никакой обфускатор не нужен.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405352
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
285... единственное жирное место это отдельная переменная под знак.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405380
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Код: java
1.
v *= 10;

Код: java
1.
v = (v << 3) + (v << 1);
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405382
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

Я в курсе. Но в этом дурацком конкурсе борьба за код, а не за производительность.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405383
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

ок.
тогда все for'ы заменить на while
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405384
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanтогда все for'ы заменить на whileи вроде бы все
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405415
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanтогда все for'ы заменить на while
Вот что значит свежим взглядом! Я уже и не заметил. Вот только проблема в том что while и for;; - оба пять символов.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405419
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanи вроде бы все
Ну, у меня есть несклько идей. Например, как бы последнее условие выкинуть. Тогда n может быть 1 или -1, без 0. Но тогда выходит ложный инкремент для значения 0. То ли пробел у них в конце тестовых файлов, то ли перенос строки. И ещё вместро тренарного оператора что-то покороче хочется. Ведь в обоих использованиях по условию нужно поменять значение или оставить прежнее. Вот это "оставить прежнее" это излишняя информация в коде.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405426
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй тренарный заборол. 280.
...
Рейтинг: 0 / 0
Быстрое чтение и разбор файла
    #39405434
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНо в этом дурацком конкурсе борьба за код, а не за производительность.
Однако ж, когда я пускаю у себя миллион out.print() - я не укладываюсь в 2 сек (с перенаправлением выхлопа в файл).
...
Рейтинг: 0 / 0
25 сообщений из 158, страница 5 из 7
Форумы / Java [игнор отключен] [закрыт для гостей] / Быстрое чтение и разбор файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]