![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Здравствуйте. Собственно есть несложная задача по программированию. Решил как полагается, но все равно программа в некоторых тестах выводит неправильный ответ (в каких - не знаю). Поправьте пожалуйста что не так.
Условие Код:
Одной из задач, возникающей при разработке поисковых систем, является поиск самых популярных сайтов по ключевым словам (тегам), описывающим сайт. Дан список сайтов. Про каждый сайт известны набор тегов сайта и его популярность. Есть запрос в виде набора тегов. На запрос необходимо выдать самый популярный сайт, у которого в описании встречаются все теги из запроса. Формат входного файла В первой строке входного файла input.txt находится набор тегов, разделённых ровно одним пробелом, количество тегов не превосходит 5. Тегом назовём такую строку, которая содержит только строчные латинские буквы и ее длина не превосходит 10 символов. В следующей строке дано число N (1 ≤ N ≤ 20)— количество сайтов. Каждый сайт описывается тремя строками. В первой строке название сайта. Название сайта состоит только из строчных латинских букв и точки. Длина названия сайта не превосходит 15 символов. Во второй строке набор тегов сайта, разделенных пробелами. Количество тегов не превосходит 10. В третьей строке число Ai(1 ≤ Ai ≤ 1000000)— популярность сайта. Формат выходного файла В выходной файл output.txt требуется вывести любой самый популярный сайт, у которых встречаются все теги из запроса. Гарантируется, что найдётся, хотя бы один сайт отвечающий запросу. Пример входного файла Код:
football volleyball 5 sportbox.ru sport football volleyball basketball swimming hockey 5000 championat.com sport football volleyball basketball hockey 4000 soccer.ru sport football 6000 sport.ru sport football vоlleyball 1000 sports.ru sport football volleyball basketball swimming hockey 2000 Мое решение Код:
program Project2; {$APPTYPE CONSOLE} uses SysUtils; var n,i,j,k,pop,x,y,p,b,kt:Integer; tag,site:string; a:array [1..20,1..4] of string; st:array [1..20,1..10] of string; tags:array [1..5] of string; begin Assign(Input,'Input.txt'); Reset(Input); Readln(tag); Readln(N); for i:=1 to n do begin Readln(a[i,1]); Readln(a[i,2]); Readln(a[i,3]); a[i,4]:='0'; end; pop:=0; k:=Length(tag); kt:=0; y:=1; p:=0; for i:=1 to k+1 do if (Copy(tag,i,1)=' ') or (i=k+1) then begin Inc(kt); tags[kt]:=Copy(tag,y,i-y); y:=i+1; end; x:=0; y:=1; p:=0; for p:=1 to n do begin x:=0; y:=1; for b:=1 to Length(a[p,2])+1 do if (Copy(a[p,2],b,1)=' ') or (b=Length(a[p,2])+1) then begin Inc(x); st[p,x]:=Copy(a[p,2],y,b-y); y:=b+1; end; end; for i:=1 to n do for j:=1 to 10 do if ((st[i,j]=tags[1]) or (st[i,j]=tags[2]) or (st[i,j]=tags[3]) or (st[i,j]=tags[4]) or (st[i,j]=tags[5])) and (st[i,j]<>'') then a[i,4]:=IntToStr(StrToInt(a[i,4])+1); pop:=StrToInt(a[1,3]); site:=a[1,1]; for i:=1 to n do begin x:= StrToInt(a[i,3]); if (a[i,4]=IntToStr(kt)) and (pop < x)then begin site:=a[i,1]; pop:=x; end; end; Assign(Output,'Output.txt'); Rewrite(Output); write(site); Close(Output); end. Последний раз редактировалось steam13, 22.02.2012 в 11:40. |
#2
|
|||
|
|||
![]() Может обнуляю где то что то не так)
|
#3
|
||||
|
||||
![]() Вам нужно на паскале решение или в дельфи? Для Дельфи есть готовые классы которые существенно упрощают решение.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#4
|
|||
|
|||
![]() Цитата:
Последний раз редактировалось steam13, 22.02.2012 в 12:49. |