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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2015, 12:45   #31
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
По умолчанию

Ребята большое спасибо за помощь! Я всё собрал в кучу и написал код, но в нём есть ошибки исправьте мне код пожалуйста!

Код:
var
 s: string;
 a: array [char] of longint;
 n,k,i,j,l,r,x,rec: longint;
begin
 assign(input,'input.txt');
 reset(input);
 assign(output,'output.txt');
 rewrite(output);

 readln(n,k);
 read(s);

 l:=1;
 for i:=1 to n do
 begin
  while a[s[r]] > k do
  begin
   dec(a[s[l]]);
   inc(l);
  end;

  if s[i] <> s[i+1] then
  begin
   r:=i;
   inc(a[s[i]]);
   inc(rec,r-l+1);
  end;
 end;
 writeln(rec);
end.
Тестировать можно здесь : http://dl.gsu.by/desk.asp\Гомельская обл. \2009\День 2\2 - "Защищенный пароль" 79474
VladKB1 вне форума Ответить с цитированием
Старый 26.02.2015, 12:53   #32
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от VladKB1 Посмотреть сообщение
Задачу решаю на турбо паскале
А чего тестировать, если на турбо паскале это не пойдет? Одна строка s длиной 1000000 чего стоит
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.02.2015, 13:00   #33
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

А почему речь о турбе?
Кстати.. Придумал вариант с памятью 36*10^6 и сложностью n log n
Храним инфу для каждого символа строки: сколько каких символ встретили до него включительно.. А потом бинарным поиском ищем.. Все
Poma][a вне форума Ответить с цитированием
Старый 26.02.2015, 19:42   #34
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А чего тестировать, если на турбо паскале это не пойдет? Одна строка s длиной 1000000 чего стоит
А отправляю на тест с помощью FreePascal
VladKB1 вне форума Ответить с цитированием
Старый 26.02.2015, 20:09   #35
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

мой код как раз для фри паскаля
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.02.2015, 21:14   #36
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
мой код как раз для фри паскаля
Помните я один раз вам (в другой теме) отвечал, что мне нельзя использовать то и то... Дак вот, у вас получиться исправить мой код не смотря на 1 000 000 символов?
VladKB1 вне форума Ответить с цитированием
Старый 28.02.2015, 00:52   #37
VladKB1
Форумчанин
 
Регистрация: 21.05.2014
Сообщений: 121
По умолчанию

Всем большое спасибо за помощь! Я решил задачу. Вот код:

Код:
var
 s: ansistring;
 a: array [char] of longint;
 n,k,i,j,l,r,x: longint;
 res:int64;
begin
 assign(input,'input.txt');
 reset(input);
 assign(output,'output.txt');
 rewrite(output);

 readln(n,k);
 read(s);

 l:=1;
 for i:=1 to n do
 begin
  r:=i;
  inc(a[s[i]]);
  while a[s[r]] > k do
  begin
   dec(a[s[l]]);
   inc(l);
  end;
  res:=res+(r-l+1);
  end;
 writeln(res);
end.
VladKB1 вне форума Ответить с цитированием
Старый 28.02.2015, 01:23   #38
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Супер! Спасибо!
Вся фишка в том, что сохраняя предыдущее значение l, мы можем в худшем случае еще раз пройтись по строке.. И будет 2N, а не N^2

Кстати, можно бахнуть {$H+} вместо ansistring

Только что с памятью? Строка всё равно нужна.. А это 10^6.. Правда ее можно молясь сократить, мол до l она нам нафиг не сдалась, но тогда другой момент : k громадно и символы различны(последнее для наглядности).. Тогда нужно удалять все ненужные, попутно смещая l..
Может позволит что-то убрать.. Но в лучшем(в идеальном, если я нигде не ошибся), мы уберем только половину.. А это 10^6 байт / 2 = 4мб

Последний раз редактировалось Poma][a; 28.02.2015 в 01:34.
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Защищенный документ Vl_Oly Microsoft Office Word 2 18.07.2013 13:23
Защищенный режим процессора Игорь Гурчин Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 27.02.2011 22:02
Access запрашивает пароль на все файлы даже если пароль не устанавливался d_adilet Microsoft Office Access 1 11.06.2010 19:44
Защищенный режим DOS - С++ saw76 Общие вопросы C/C++ 0 16.12.2009 11:31
Защищенный режим Advisor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 08.12.2008 17:37