Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Вниз

Областная олимпиада   Найти похожие ветки 

 
ProgRAMmer Dimonych ©   (2007-01-04 18:42) [0]

Оцените задачки с областной олимпиады...

1. Пролетели не по-зимнему тёплые недели зимы и наступили рождественские раздники, а с ними и долгожданная деревенская рождественская спартакиада.
   Традиционно спартакиаду открывает староста деревни. Торжественное открытие начинается с соревнования по перетягиванию каната. Чтобы сформировать из жителей 2 команды, которые будут участвовать в соревновании, староста выстраивает всех жителей деревни в шеренгу. После этого он проходит от левого края шеренги к правому и выборочно указывает на людей, которые примут участие в этом торжественном соревновании. Все выбранные старостой деревни жители (их всегда положительное и чётное число) делают шаг вперёд и последовательно рассчитываются на первый-второй, начиная с левого края. Из первых номеров формируется первая команда, а из вторых номеров - вторая команда.
   Староста, являясь суеверным человеком, считает хорошим знаком, если выиграет первая команда. Известно, что староста знает всё о жителях деревни, в том числе и силу каждого из них, выраженную в числовом эквиваленте.
   Помогите старосте выбрать участников соревнования так, чтобы после разделения их на две команды разница между силой первой команды и силой второй команды была максимальна. Силой команды будем называть сумму числовых эквивалентов сил всех её участников.

   Входные данные:
   Первая строка входного файла содержит целое число N (2<=N<=32767) - количество жителей деревни. Во второй строке файла записано N целых чисел P1, P2, ..., PN (1<=Pi<=100000), разделённых одиночными пробелами, где Pi - сила жителя, стоящего в шеренге на i-м слева месте. Жители в шеренге нумеруются с единицы, начиная с левого края.
   Выходные данные:
   Единственная строка выходного файла должна содержать одно целое число - максимально возможную разность между силой первой и второй команд.

   Пример
   input.txt                                              output.txt
===============================================
   2                                                        9999
   10000 1
------------------------------------------------------------
   7                                                        12
   7 6 2 4 8 1 5
------------------------------------------------------------
   4                                                        -1
   1 2 3 4


 
ProgRAMmer Dimonych ©   (2007-01-04 19:12) [1]

У меня ни одного теста на самотестировании почему-то не взяла, хотя во время отладки всё выдавала правильно. Возможно, из-за того, что writeln"ом пользовался при выводе в файл. Но тогда создателей таких тестеров расстреливать следует... :)


 
ors_archangel ©   (2007-01-04 19:17) [2]

Голимый перебор? А где же:

* Найдите приближённое решение алгоритмом с асимптотической эффективностью не хуже O(n log n), используя тот факт, что ....


 
ProgRAMmer Dimonych ©   (2007-01-04 19:26) [3]

> Голимый перебор?
Да вот, к несчастью, нет. Результат: "Wrong Answer!".


 
ors_archangel ©   (2007-01-04 19:34) [4]

Writeln как бы создаёт файл с двумя строками: вторая - пуста. Поэтому, лучше Write, чтобы в output.txt была единственная строка


 
ProgRAMmer Dimonych ©   (2007-01-04 19:45) [5]

> ors_archangel ©   (04.01.07 19:34) [4]
Вот это-то и было первое, что пришло мне в голову через час после самотестирования :(


 
ProgRAMmer Dimonych ©   (2007-01-04 20:18) [6]

Задача 2. Колхозное поле, на котором выращен богатый урожай, облюбовала стая пернатых. Поле представляет собой квадрат из NxN клеок. Для защиты урожая от непрошенных пернатых гостей председатель колхоза распорядился построить M механических отпугивающих устройств. Каждое такое устройство находится в центре некоторой клетки поля и позволяет обеспечить защиту этой клетки, а также всех клеток, лежащих с ней на одной диагонали.
   Однажды председатель решил узнать, сколько клеток на колхозном поле не защищено от нападения птиц. А так как он очень занят организацией сбора урожая со всех угодий колхоза, то ответить на этот вопрос поручили Вам - местному компьютерному гению.
   Входные данные:
   Первая строка входного файла содержит целые числа N (1<=N<=1000000) и M (1<=M<=100000), разделённые пробелом. Каждая из следующих M строк описывает местоположение устройства и содержит два целых числа от 1 до N включительно - номер строки и номер столбца, на пересечении которых оно находится. Строки нумеруются снизу вверх, а столбцы - слева направо. Нумерация строк и столбцов начинается с единицы. Никакие два устройства не находятся в одной клетке.
   Выходные данные:
   Единственная строка выходного файла должна содержать одно целое число - количество клеток колхозного поля, которое не защищает ни одно из устройств.
   Пример
   input.txt                                                     output.txt
================================================
   10 6                                                           33
   4 7
   8 5
   8 7
   6 2
   9 7
   8 4


 
ProgRAMmer Dimonych ©   (2007-01-04 20:45) [7]

Как к этой второй задаче вообще можно было подойти? Мне пришлось решить для небольших N, а для больших - обрубать. Слышал, что во FP скомпилировался array [1..1000000,1..1000000] of Boolean, но программа вылетала сразу же.


 
Spirt   (2007-01-04 20:48) [8]

Хорошо, что я до областной олимпиады ннемножко баллов не добрал :-)  
Облажался бы :-)


 
default ©   (2007-01-04 20:50) [9]

попробуйте исследовать свойства максимального решения
по этим свойствам потом "собирать" решение уже для конкретного набора жильцов
я думаю это перспективный подход, я думаю он положит задачу прямо-таки на лопатки;)


 
ProgRAMmer Dimonych ©   (2007-01-04 20:51) [10]

> Spirt   (04.01.07 20:48) [8]
Может, махнёмся? Меня от этих задач на рвоту тянет: задачи ужасно сложные, а программы, написанные для их решения, - абсолютно бесполезные. :(


 
ProgRAMmer Dimonych ©   (2007-01-04 20:53) [11]

> default ©   (04.01.07 20:50) [9]
Я после олимпиады совсем в танке :( Переформулируйте, пожалуйста, Вашу мысль, а то у меня чего-то в голове каша, которая мешает разглядеть суть...


 
Spirt   (2007-01-04 20:55) [12]


> ProgRAMmer Dimonych ©   (04.01.07 20:51) [10]


Во-во, меня тоже бесполезность мутит, смысла не вижу :-) У нас на городской тупые проверяющие были, вот я и баллов недобрал, ну невдомек им было, что одну и ту же задачу разными способами решить можно, а тот факт, что прога работала их нисколько не волновал


 
ProgRAMmer Dimonych ©   (2007-01-04 21:00) [13]

> Spirt   (04.01.07 20:55) [12]
> > ProgRAMmer Dimonych ©   (04.01.07 20:51) [10]
> Во-во, меня тоже бесполезность мутит, смысла не вижу :-)
> У нас на городской тупые проверяющие были, вот я и баллов
> недобрал, ну невдомек им было, что одну и ту же задачу разными
> способами решить можно, а тот факт, что прога работала их
> нисколько не волновал
Самое обидное, что объективнее всё равно ничего не будет: писать действительно полезные программы как будто проще, поэтому оценивать придётся интерфейс, а оценка интерфейса - личное дело каждого :(


 
Virgo_Style ©   (2007-01-04 21:03) [14]

2. А если не все поле "засеивать", а потом считать, а каждую клетку по очереди проверять?
Хотя, меня гложет подозрение, что есть более хитрый способ.


 
ProgRAMmer Dimonych ©   (2007-01-04 21:11) [15]

> Virgo_Style ©   (04.01.07 21:03) [14]
Проблема в том, что клеток-то в таком "квадратике" 1000000x1000000, т.е. 10^12. А на работу программы, кстати, отводится столько же, сколько на первую задачу, т.е. 0,5 сек. Так что, действительно, должен быть более хитрый подход. :(


 
Virgo_Style ©   (2007-01-04 21:14) [16]

Так. Мысля. Надо работать не с клетками, а с диагоналями...


 
Юрий Зотов ©   (2007-01-04 21:14) [17]

Нереальные задачи.

"Деревенская рождественская спартакиада", "колхозное поле, на котором выращен богатый урожай" - это где ж такое видано?


 
$Pl@Sh ©   (2007-01-04 21:17) [18]


> Поле представляет собой квадрат


Из области фантастики вообще


 
ProgRAMmer Dimonych ©   (2007-01-04 21:20) [19]

> Virgo_Style ©   (04.01.07 21:14) [16]
Была такая. За 3 часа продумал. диагоналей - 2*(2N-1)=4N-2, при N=1000000 - виселица. 3999998 - 125000 LongInt"ов!!! :(
> Юрий Зотов ©   (04.01.07 21:14) [17]
Жаль, не прочитают организаторы этого дебилизма нашей веточки :(


 
ProgRAMmer Dimonych ©   (2007-01-04 21:22) [20]

> $Pl@Sh ©   (04.01.07 21:17) [18]
> > Поле представляет собой квадрат
> Из области фантастики вообще
Собственно только то, что поле не представляет собой идеальную окружность (в смысле, круг) и грело...


 
$Pl@Sh ©   (2007-01-04 21:23) [21]


> Торжественное открытие начинается с соревнования по перетягиванию
> каната.


Торжественное открытие не с этого начинается или я чё-то недопонимаю в русских деревнях :-)


 
TUser ©   (2007-01-04 21:24) [22]

Кажется нигде ненакосячил, хотя неплохо бы погонять еще  на тестовых примерах. Алгоритм выделен жирным.

{$apptype console}
uses SysUtils;

var f: textfile;
   n: integer;
   a: array of integer;
   r: array of integer;
   s: string;

   i, j, k: integer;
begin
 assignfile (f, "input.txt");
 reset (f);
 readln (f, s);
 n := StrToInt (s);
 SetLength (a, n);
 readln (f, s);
 i := 0; j := 1; k := 0;  
 while j <= length (s) + 1 do begin
   if (j = length (s) + 1) or (s[j] = " ") then begin
     a[i] := StrToInt (copy (s, k + 1, j - k - 1));
     inc (i);
     k := j;
     end;
   inc (j);
   end;
 closefile (f);

 {
 writeln (n);
 for i := 0 to n - 1 do
   write (a[i], " ");
 writeln;
 }

 SetLength (r, n);
 r[n-1] := 0;
 for i := n-2 downto 0 do begin
   if r[i+1] = 0 then r[i] := -MaxInt else r[i] := r[i+1];
   for j := i + 1 to n - 1 do begin
     k := a[i] - a[j];
     if j < n - 1 then inc (k, r[j+1]);
     if k > r[i] then r[i] := k;
     end;
   end;
 // writeln (r[0]);


 assignfile (f, "output.txt");
 rewrite (f);
 write (f, r[0]);
 closefile (f);
end.


 
$Pl@Sh ©   (2007-01-04 21:24) [23]


> Собственно только то, что поле не представляет собой идеальную
> окружность (в смысле, круг) и грело...


да... или сферу...


 
Gero ©   (2007-01-04 21:34) [24]

Обычная олимпиадная задача.

> [3] ProgRAMmer Dimonych ©   (04.01.07 19:26)
> Результат: &laquo;Wrong Answer!&raquo;.

Ты накосячил значит.

> [12] Spirt   (04.01.07 20:55)
> У нас на городской тупые проверяющие были, вот я и баллов
> недобрал, ну невдомек им было, что одну и ту же задачу разными
> способами решить можно, а тот факт, что прога работала их
> нисколько не волновал

Ьред сивой кобылы.


 
default ©   (2007-01-04 21:43) [25]

A1/A2, B1/B2 - это две выбранные пары жильцов
если решение максимально, то будет выполнено
число жильцов по краям и в промежутках выбрано произвольно
(их может вообще не быть, быть больше или меньше)

l1<=l2<= A1 >=a1>=a2>= A2 <= m1<=m2<=  B1 >=b1>=b2>= B2 <= r1<=r2

помедитируй над этим


 
Sha ©   (2007-01-04 21:45) [26]

> ProgRAMmer Dimonych ©   (04.01.07 21:20) [19]
> Жаль, не прочитают организаторы этого дебилизма нашей веточки :(


Шутка это.
Нормальные задачи.


 
$Pl@Sh ©   (2007-01-04 22:01) [27]


> Spirt   (04.01.07 20:55) [12]


Эт ты накосячил


 
default ©   (2007-01-04 22:04) [28]

а во второй задаче надо просто иметь массив диагоналей булева типа и уметь пересчитывать координаты клетки в две диагонали которые покрывает устройство расположенное в этой клетке


 
TUser ©   (2007-01-04 22:07) [29]

> default ©   (04.01.07 21:43) [25]

Я, по правде говоря, ничего не поянял.


 
ProgRAMmer Dimonych ©   (2007-01-04 22:11) [30]

Задача 3. В империи кукурака вот уже на протяжении 32 лет правит император Горделиус, известный всем как очень мудрый и честный правитель, который больше жизни любит свой народ. Всё бы хорошо, но годы начали брать своё, всё реже и реже жители империи могли видеть и общаться со своим императором, да и сам он понимал, что у него уже не та хватка и ловкость, что была ранее. В один из вечеров император принял решение об уходе в отставку. Прямых наследников у Горделиуса не было. По законам, в этом случае ему предстояло разделить всю империю на части и раздать во владение своим двум заместителям. Но как это сделать, чтобы навсегда остаться ля жителей мудрым и честным?
   У императора есть подробная карта империи, которая досталась ему по наследству от отца. Известно, что империя имеет форму прямоугольника протяжённостью N километров с севера на юг и M километров с запада на восток. На карте проведены специальные горизонтальные и вертикальные линии, называемые линиями широты и долготы соответственно. Линии широты идут строго с севера на юг, их количество равно M-1. Известно, что линии широты и долготы параллельны границам империи и разбивают его территорию на N*M квадратов с длиной стороны в один километр. Для лучшей ориентации на карте император ввёл на ней декартову прямоугольную систему координат, направив ось абсцисс Ox с запада на восток через северную границу империи, а ось ординат Oy - с севера на юг через западную границу империи.
   Экономическим отделом империи для каждого из квадратов было вычислено и нанесено на карту неотрицательное целое число, соответствующее качеству и плодородию земли в этом квадрате. Это число называется ценой квадрата.
   Император решил разделить империю достаточно простым способом - провести через всю карту прямую, пересекающую прямоугольник, соответствующий границам империи, или касающуюся его. Все квадраты, находящиеся полностью по одну сторону от прямой и не имеющие с ней ни одной общей точки, он решил отдать одному своему заместителю, а все квадраты полностью находящиеся по другую сторону от прямой и не имеющие с ней ни одной общей точки, - другому заместителю. Возникает вопрос, а что же делать с квадратами, которые пересечёт проведённая императором прямая? В этом вопросе император был однозначен - все эти квадраты будут объявлены достоянием народа.
   Ваша задача - помочь императору провести разделительную прямую так, чтобы сумма цен квадратов, пересекаемых прямой, была максимальной.
   Будем считать, что:
   - толщина всех линий и границ равна нулю;
   - разделительная прямая пересекает квадрат, если она имеет с ним хотя бы одну общую точку.
   Входные данные
   В первой строке входного файла находятся два целых числа N и M (1<=N, M<=40), разделённые одним пробелом.
   Каждая из следующих N строк содержит M целых чисел от 0 до 10^7, разделённых одиночными пробелами, где i-е число в j-й строке - это цена квадрата, юго-восточный угол которого имеет координаты (i,j).
   Выходные данные
   Единственная строка выходного файла должна содержать одно целое число - сумму цен квадратов, пересекаемых разделительной прямой.
   Пример
   input.txt                                         output.txt
==========================================
   4 3                                                17
   3 1 2
   2 2 1
   3 1 0
   1 2 4
------------------------------------------------------
   1 3                                                4
   1 2 1


 
Zeqfreed (links)   (2007-01-04 22:13) [31]

default,
По-моему проще посчитать длины всех диагоналей и затем вычесть кол-во пересечений диагонялей всех устройств.

P.S. Кнопка "цитата" в links не работает! :(


 
ProgRAMmer Dimonych ©   (2007-01-04 22:14) [32]

> TUser ©   (04.01.07 22:07) [29]
> > default ©   (04.01.07 21:43) [25]
> Я, по правде говоря, ничего не поянял.
Он имеет в виду то, что я, собственно, и сделал. Идём слева направо. Сначала до тех пор, пока сила каждого следующего больше, чем предыдущего, последнего запоминаем. Потом - пока сила каждого следующего меньше, чем предыдущего, вычисляем разность. Если ряд не закончился - повторяем процедуру отбора.


 
Sha ©   (2007-01-04 22:14) [33]

> default ©   (04.01.07 22:04) [28]
> а во второй задаче надо просто иметь массив диагоналей булева типа и
> уметь пересчитывать координаты клетки в две диагонали которые
> покрывает устройство расположенное в этой клетке

Можно проще


 
ProgRAMmer Dimonych ©   (2007-01-04 22:15) [34]

> Ьред сивой кобылы.
Максимум, процентов на 25.


 
$Pl@Sh ©   (2007-01-04 22:15) [35]


>  В империи кукурака


Когда составитель прочитал первые две задачи, он напился...


 
ProgRAMmer Dimonych ©   (2007-01-04 22:15) [36]

> Sha ©   (04.01.07 22:14) [33]
А вот отсюда поподробнее, пожалуйста...


 
ProgRAMmer Dimonych ©   (2007-01-04 22:16) [37]

> $Pl@Sh ©   (04.01.07 22:15) [35]
> >  В империи кукурака
> Когда составитель прочитал первые две задачи, он напился...
А я, когда прочитал все три - грязно выругался (мысленно)...


 
ProgRAMmer Dimonych ©   (2007-01-04 22:23) [38]

> $Pl@Sh ©   (04.01.07 22:15) [35]
> >  В империи кукурака
> Когда составитель прочитал первые две задачи, он напился...
И обкурился:
> У императора есть подробная карта империи,
У беларускай мове ёсць слова "падробка", якое на рускай мове гучыць як "подделка". Ассоциации у меня какие-то нездоровые...


 
Sha ©   (2007-01-04 22:23) [39]

default ©   (04.01.07 22:04) [28] умную вещь сказал.

Но если устройств намного меньше, чем размеры поля,
то будет очень неэффективно растрачена память.

Подумай над этим )


 
$Pl@Sh ©   (2007-01-04 22:26) [40]


> Возникает вопрос, а что же делать с квадратами, которые
> пересечёт проведённая императором прямая?


В России с таким вопросом быстро разбираются



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.58 MB
Время: 0.074 c
10-1128086100
Andrew Dovgal
2005-09-30 17:15
2007.01.28
Программо получить RTF из OLE-automated Word a


15-1167509299
vasIZmax
2006-12-30 23:08
2007.01.28
Распечатать текст программы...


3-1162814389
Stanislav
2006-11-06 14:59
2007.01.28
Создание запроса


15-1168264739
brrrr
2007-01-08 16:58
2007.01.28
Нас всех прослушивают! Ужас! Мы беззащитны :(


15-1168127114
AntiUser
2007-01-07 02:45
2007.01.28
Великая тайна воды





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский