Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 9

Для каждого адреса необходимо вывести количество фильтров, которым соответствует этот адрес

03.04.2015, 16:22. Показов 1975. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для проведения чемпионата мира по поиску в сети Меганет организаторам необходимо ограничить доступ к некоторым адресам. Адрес в сети Меганет представляет собой строку, состоящую из имени сервера и имени раздела.

Имя сервера представляет собой строку, содержащую от одной до пяти частей включительно. Каждая часть представляет собой непустую строку, состоящую из строчных букв латинского алфавита. Части разделены точкой. Примеры корректных имен сервера: «a», «ab.cd», «abacaba», «a.b.c.d.e».

Имя раздела представляет собой строку, которая может быть либо пустой, либо содержать от одной до пяти частей включительно. Каждая часть начинается с символа «/», после которого следует одна или несколько строчных латинских букв. Примеры корректных имен разделов: «», «/a», «/aba», «/a/b/c/d/e».

Адрес формируется приписыванием имени раздела в конец имени сервера. Например, корректными адресами являются строки: «a», «aba/d/f/g/h», «a.b», «aba.caba/def/g», «c.d.e.f.g/a/b/c/d/e».

Для ограничения доступа к некоторым адресам сети Меганет организаторы чемпионата подготовили несколько фильтров. Фильтр, как и адрес, состоит из двух частей: фильтра сервера и фильтра раздела.

Фильтр сервера состоит из имени сервера, перед которым может также идти строка «*.». Если фильтр сервера представляет собой только имя сервера, то этому фильтру соответствует только сервер, имеющий точно такое же имя. Если фильтр сервера представляет собой строку «*.S», где S – имя сервера, то ему соответствуют сервера, удалением нуля или более начальных частей от имени которых можно получить строку S.

Аналогично, фильтр раздела представляет собой имя раздела, после которого может идти строка «/*». Фильтру раздела, который представляет собой просто имя раздела R, соответствуют только разделы, в точности совпадающие с R. Если фильтр раздела представляет собой строку «R/*», то ему соответствуют все разделы, удалением от имен которых нуля или более конечных частей можно получить строку R. Адрес соответствует фильтру, если его имя сервера соответствует фильтру сервера, а его имя раздела соответствует фильтру раздела.

Примеры фильтров и соответствующих им адресов приведены в таблице ниже.

Фильтр Примеры подходящих адресов
ab.c/d/e ab.c/d/e
*.a a; ax.a; efg.a
*.a/b/c a/b/c; ax.a/b/c; efg.a/b/c
x.yz/a/* x.yz/a; x.yz/a/b/c; x.yz/a/xyz
*.a/* a; x.a; e.fg.a; a/b/c; x.a/ddd/c; e.fg.a/b/c/g/haha/i
*.a/b/c/* a/b/c; x.a/b/c; e.fg.a/b/c; a/b/c/xxx; e.fg.a/b/c/d/e/f
Требуется написать программу, которая по заданному набору фильтров и списку адресов определяет для каждого адреса, какому числу фильтров соответствует этот адрес.

Входные данные

Первая строка входного файла INPUT.TXT содержит целое число n – количество фильтров (1 ≤ n ≤ 50 000). Последующие n строк содержат фильтры, по одному на строке. Каждый фильтр удовлетворяет ограничениям, описанным выше. Следующая строка содержит одно целое число k – количество адресов, которые необходимо проверить на соответствие фильтрам (1 ≤ k ≤ 50 000). Последующие k строк содержат адреса, по одному на строке. Каждый адрес удовлетворяет ограничениям, описанным выше. Длина каждой строки входного файла не превышает 50 символов. Общий размер входного файла не превышает 4 мегабайт.

Выходные данные

В выходной файл OUTPUT.TXT выведите k целых чисел, по одному на строке – для каждого адреса необходимо вывести количество фильтров, которым соответствует этот адрес.


Нужен код на паскаль. Помогите пожалуйста!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2015, 16:22
Ответы с готовыми решениями:

Вывести список предметов, по которым есть пары в этот день
У нас есть следующие данные: название предмета, имя преподавателя, номер группы и аудитории, номер дня недели и время пары. Необходимо...

Вывести общее количество зерна (в центнерах) отдельно каждого сорта для каждого района
О поступлении с элеваторов к зернохранилища зерна I, II и III сорта Структура записи: • название района, • номер элеватора, •...

Вывести по введенному году, какому животному восточного календаря соответствует этот год
Вывести по введенному году, какому животному восточного календаря соответствует этот год. Годы внутри цикла носят названия: крыса, бык,...

1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
04.04.2015, 16:03
Лучший ответ Сообщение было отмечено Vasaaaaa как решение

Решение

В первом приближении:
Pascal
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
37
38
39
40
41
42
43
44
type TString=String[50];
 
function IsMatch(url, flt: TString): Boolean;
var
  pf, pu: Integer;
begin
  IsMatch:=False;
  pu:=Pos('/',url); if pu=0 then pu:=Length(url)+1;
  pf:=Pos('/',flt); if pf=0 then pf:=Length(flt)+1;
  if Copy(flt,1,2)='*.' then
    if Copy(flt,2,pf-2)<>Copy('.'+url,pu-pf-1,pf-2) then Exit else
  else 
    if Copy(flt+'/',1,pf)<>Copy(url+'/',1,pf) then Exit;
  if Copy(flt,Length(flt)-1,2)='/*' then
    if Copy(flt,pf,Length(flt)-pf)<>Copy(url+'/',pu,Length(flt)-pf) then Exit else
  else
    if Copy(flt,pf+1,MaxInt)<>Copy(url,pu+1,MaxInt) then Exit;
  IsMatch:=True;
end;
 
var
  f, o: Text;
  b: array [1..1024*8] of Byte;
  n, k, i, j, c: Word;
  flt, url: TString;
begin
  Assign(input,'input.txt'); Assign(f,'input.txt'); Assign(o,'output.txt');
  Reset(f); Rewrite(o);
  ReadLn(f,n);
  for i:=1 to n do ReadLn(f);
  ReadLn(f,k);
  for i:=1 to k do begin
    Write(i/k*100:3:0,'%...'#13);
    ReadLn(f,url);
    Reset(input); SetTextBuf(input,b,SizeOf(b));
    ReadLn(n); c:=0;
    for j:=1 to n do begin
      ReadLn(flt);
      if IsMatch(url,flt) then Inc(c);
    end;
    WriteLn(o,c);
  end;
  Close(f); Close(o);
end.
Добавлено через 7 минут
Для Free Pascal и прочих, способных уместить в памяти все фильтры, можно так:
Pascal
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
37
38
39
40
type TString=String[50];
 
function IsMatch(url, flt: TString): Boolean;
var
  pf, pu: Integer;
begin
  IsMatch:=False;
  pu:=Pos('/',url); if pu=0 then pu:=Length(url)+1;
  pf:=Pos('/',flt); if pf=0 then pf:=Length(flt)+1;
  if Copy(flt,1,2)='*.' then
    if Copy(flt,2,pf-2)<>Copy('.'+url,pu-pf-1,pf-2) then Exit else
  else 
    if Copy(flt+'/',1,pf)<>Copy(url+'/',1,pf) then Exit;
  if Copy(flt,Length(flt)-1,2)='/*' then
    if Copy(flt,pf,Length(flt)-pf)<>Copy(url+'/',pu,Length(flt)-pf) then Exit else
  else
    if Copy(flt,pf+1,MaxInt)<>Copy(url,pu+1,MaxInt) then Exit;
  IsMatch:=True;
end;
 
var
  o: Text;
  n, k, i, j, c: Word;
  flt: array [1..50000] of TString;
  url: TString;
begin
  Assign(input,'input.txt'); Assign(o,'output.txt');
  Reset(input); Rewrite(o);
  ReadLn(n);
  for i:=1 to n do ReadLn(flt[i]);
  ReadLn(k);
  for j:=1 to k do begin
    Write(j/k*100:3:0,'%...'#13);
    ReadLn(url); c:=0;
    for i:=1 to n do
      if IsMatch(url,flt[i]) then Inc(c);
    WriteLn(o,c);
  end;
  Close(o);
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.04.2015, 16:03
Помогаю со студенческими работами здесь

Вывести список сотрудников, которым необходимо пройти аттестацию
Создать структуру NII, содержащую поля: Фамилия, Имя, год рождения, количество публикаций, год последней аттестации. Записать в файл данные...

Дан массив А, содержащий от 1 до k символов, за которым следует точка. Вывести этот текст в обратном порядке
Дан массив А, содержащий от 1 до k символов, за которым следует точка. Вывести этот текст в обратном порядке.

Дан массив, содержащий от 1 до k символов, за которым следует точка. Вывести этот текст в обратном порядке
решите мне,очень надо до завтра,3 решил а 1 осталась Дан массив, содержащий от 1 до k символов, за которым следует точка. Вывести этот...

Вывести фамилии студентов, которым необходимо повысить успеваемость в порядке убывания
Составить программу, которая выводит список фамилий студентов, которым по итогам сессии необходимо повысить успеваемость до фактического...

Очень интересная задача! Для адреса 93.175.16.7/24 вычислить маску сети, широковещательный адрес, адрес сети
А вам по силам справиться? Для адреса 93.175.16.7/24 вычислить маску сети, широковещательный адрес, адрес сети, сколько компьютеров...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru