Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Олимпиадная задача


Pumba ©   (2002-11-29 14:08:00) 

Господа программеры помгите мне решить эту задачу. Примного буду благодарен.

В компьютере фирмы Megasoft завелся страшный вирус. Главный
программист фирмы Гилл Бейтс заподозрил, что этот вирус переставляет
каким-то образом слова в тексте. Чтобы написать антивирус, он
распечатал исходный текст сообщения, а затем зараженный. Оба текста
уместились каждый в одной строке, содержат только английские буквы,
слова разделяются одним пробелом. Тексты не начинаются с пробела и не
заканчиваются им. Помогите Гиллу Бейтсу определить,как надо переставить
слова в тексте, чтобы его вылечить.

Ввод-вывод
Вы вводите с клавиатуры две строки?исходную и зараженную (длины
строк не превышают 255 символов).
Вы выводите на экран порядок,в котором нужно переставить слова.
Если это невозможно, необходимо напечатать 0.

Примеры

Ввод>megasoft is a best corporation
Ввод>is corporation best megasoft a
Вывод<2 5 4 1 3

Ввод>megasoft is a best corporation
Ввод>is corporation megasoft a good
Вывод< 0


Pumba   (2002-11-29 15:41:00) [1]

А все. до меня дошло. Огромное тебе спасибо Yegor Derevenets.

MiXenWorK - да, задачи, видимо, брали оттуда, но мне эту задачу дал препод, если не решу - мне двояк за неработу на уроке.


Pumba   (2002-11-29 15:35:00) [2]

Компилирую на паскале.
на строку:
Source, results: array [1..MaxN] of string
он пишет слишком большая структура


Yegor Derevenets   (2002-11-29 15:10:00) [3]

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


// Compiles with FreePascal 1.06
// Should compile with Borland Pascal 5.5 and later (if you remove this comments)
// Should not compile with Delphi (any version)
// All right reserved by Yegor Derevenets

const
MaxN=1000;
FileIn="aaa.in";
FileOut="aaa.out";
var
Sources, Results: array [1..MaxN] of string;
Answer: array [1..MaxN] of Integer;
N: Integer;
MissionImpossible: Boolean;

procedure ReadData;
var
F: Text;
S: string;
NChar, ScanIndx: Byte;
begin
Assign (F, FileIn);
Reset (F);
Readln (F, S);
N:=1;
for NChar:=1 to Length (S)
do if S [NChar]=#32
then Inc (N)
else Sources [N]:=Sources [N]+S [NChar];
Writeln (N);
ScanIndx:=1;
Readln (F, S);
for NChar:=1 to Length (S)
do if S [NChar]=#32
then Inc (ScanIndx)
else Results [ScanIndx]:=Results [ScanIndx]+S [NChar];
Close (F);
end;

procedure WriteData;
var
F: Text;
NWord: Byte;
begin
Assign (F, FileOut);
Rewrite (F);
if MissionImpossible
then Writeln (F, 0)
else begin
for NWord:=1 to N-1
do Write (F, Answer [NWord], #32);
Writeln (F, Answer [N]);
end;
Close (F);
end;

procedure Solve;

function IndexOfWordWithIndex (aIndex: Integer): Integer;
var
NWord: Integer;
begin
for NWord:=1 to N
do if Results [aIndex]=Sources [NWord]
then begin
IndexOfWordWithIndex:=NWord;
Exit;
end;
IndexOfWordWithIndex:=-1;
end;

var
NWord: Integer;
begin
MissionImpossible:=false;
for NWord:=1 to N
do begin
Answer [NWord]:=IndexOfWordWithIndex (NWord);
if Answer [NWord]<1
then MissionImpossible:=true;
end;
end;

begin
ReadData;
Solve;
WriteData;
end.


Yegor Derevenets   (2002-11-29 14:56:00) [4]

Полный текст выслать на мыло?


Yegor Derevenets   (2002-11-29 14:55:00) [5]

Ссори: for NWord:=1 to N


MiXenWorK   (2002-11-29 14:53:00) [6]

Это задачи с www.olymp.vinnica.ua
(это я на вопрос про олимпиаду)


Yegor Derevenets   (2002-11-29 14:49:00) [7]

Вообще умные люди на дельфи не пишут. Тем более - олимпиадные задачи. А ты щас на олимпиаде в инете сидишь - или так, заочник?

Я бы прочитал все эти неххорошие словечки в массив (сам сможешь?) и получил бы что-то вроде этого:

const
MaxN=1000; // maximal amount of words
var
Sources, Results: array [1..MaxN] of string;
Answer: array [1..MaxN] of Integer;
N: Integer; // amount of words
MissionImpossible: Boolean;

procedure ReadData;
begin
...
end;

procedure WriteData;
begin
...
end;

procedure Solve;

function IndexOfWordWithIndex (aIndex: Integer): Integer;
var
NWord: Integer;
begin
for NWord:=1 to aIndex
do if Results [aIndex]=Sources [NWord]
then begin
IndexOfWordWithIndex:=NWord;
Exit;
end;
IndexOfWordWithIndex:=-1;
end;

var
NWord: Integer;
begin
MissionImpossible:=false;
for NWord:=1 to N
do begin
Answer [NWord]:=IndexOfWordWithIndex (NWord);
if Answer [NWord]<1
then MissionImpossible:=true;
end;
end;


Calm   (2002-11-29 14:45:00) [8]

Не задавайте вопросы из домашних заданий
Хакеры хорошо умеют отвечать на вопросы из домашних заданий - большинство из нас их делало самостоятельно. Эти вопросы заданы для работы вам, чтобы вы могли научиться на собственном опыте. Просить можно о подсказке, но не о полном решении.


Подбробнее на http://rsdn.ru/?forum/


KoluChi   (2002-11-29 14:26:00) [9]

Что-то в этом духе
CODE>Strs1: TStrings; //1 строка разбить по словам
Strs2: TStrings; //2 строка
Res: TStrings;
for I := 0 to Strs2.Count - 1 do
begin
Index := Str1.IndexOf(Strs2.Strings[I])
if Index > 0 then Res.Add(IntToStr(I))
else
begin
Res.Text := "0";
Break;
end
end;


Pumba   (2002-11-29 14:16:00) [10]

Да какая разница? Вообще-то на олимпиаде. Вы решить помогите!!!! Или нет на этом сайт умных людей???


anonim   (2002-11-29 14:15:00) [11]

Где Взял???


Наверх

Титульная страница Поиск, карта сайта Написать письмо