INFOpudding - ИТ в образовании и не только
Четверг, 04.03.2021, 19:16
» Меню сайта
» Категории раздела
Информатика и ИКТ [0]
Программирование [6]
Математика [0]
» Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

» Форма входа
Главная » Статьи » Олимпиадные задания » Программирование

Задание 2. Региональный этап Всероссийской олимпиады по информатике 2010-2011 учебного года
Задача 2.    «Колесо Фортуны»
Имя входного файла:                   wheel. in
Имя выходного файла:                 wheel. out
Ограничение по времени:            2 секунды
Ограничение по памяти:              256 Мбайт

Развлекательный телеканал транслирует шоу «Колесо Фортуны». В процессе игры участники шоу крутят большое колесо, разделенное на сектора. В каждом секторе этого колеса записано число. После того как колесо останавливается, специальная стрелка указывает на один из секторов. Число в этом секторе определяет выигрыш игрока.
Юный участник шоу заметил, что колесо в процессе вращения замедляется из-за того, что стрелка задевает за выступы на колесе, находящиеся между секторами. Если колесо вращается с угловой скоростью v градусов в секунду, и стрелка, переходя из сектора X к следующему сектору, задевает за очередной выступ, то текущая угловая скорость движения колеса уменьшается на к градусов в секунду. При этом если v < к, то колесо не может преодолеть препятствие и останавливается. Стрелка в этом случае будет указывать на сектор Х.

Юный участник шоу собирается вращать колесо. Зная порядок секторов на колесе, он хочет заставить колесо вращаться с такой начальной скоростью, чтобы после остановки колеса стрелка указала на как можно большее число. Колесо можно вращать в любом направлении и придавать ему начальную угловую скорость от а до Ъ градусов в секунду.
Требуется написать программу, которая по заданному расположению чисел в секторах, минимальной и максимальной начальной угловой скорости вращения колеса и величине замедления колеса при переходе через границу секторов вычисляет максимальный выигрыш.
Решение:
Turbo Pascal
Perl (решение предоставил Konstantinus)
program wheel;
var                     
    ft:text;            
    n,a,b,k,i,x,v:integer;
    sekt: array[1..100] of integer;
BEGIN
Assign(ft,'wheel.in');
Reset(ft);            
Readln(ft,n);
for i:=1 to n-1 do Read(ft,sekt[i]);
Readln(ft,sekt[n]);
Read(ft,a); 
Read(ft,b);
Read(ft,k);
close(ft);
x:=sekt[1];
repeat
v:=(a div k) mod n;
if sekt[v]<sekt[n-v+1] then v:=n-v+1;
if x<sekt[v] then x:=sekt[v];
a:=a+k;
until a>=b;
Assign(ft,'wheel.out');
Rewrite(ft);           
writeln(ft,x);      
close(ft);          
END.
#!/usr/bin/perl
#прописываем путь к perl
#use strict;

#включаем вывод сообщений об ошибке подключением модуля strict
use IO::File;
# подключаем модуль IO::FIle для работы с файлами в объектно-ориентированном контексте
my $file_in="wheel.in";
my $fh1 = IO::File->new("<$file_in")
    or die "Can`t open $file_from: $!\n";
#определяем входной файл, в случае ошибки при открытии файла выводится соответствующее сообщение с указанием типа ошибки
my $file_out="wheel.out";
my $fh2 = IO::File->new(">$file_out")
    or die "Can`t open $file_to: $!\n";
#то же для выходного файла. Если он не существует, то будет создан 
my $n = $fh1->getline;
# читаем 1 строку из файла в переменную
my $line = $fh1->getline;
# читаем 2 строку из файла в переменную
my @numbers1 = split (/\s+/,$line);
# режем переменную с числами на отдельные числа, записываем их в 1 массив скаляров
my $line = $fh1->getline;
# читаем 3 строку из файла в переменную
my @numbers2 = split (/\s+/,$line);
# режем переменную с числами на отдельные числа, записываем их вo 2 массив скаляров

###############  ВЫЧИСЛЕНИЯ  #################
my $x=$numbers1[0];
do {
my $v = (int($numbers2[0]/$numbers2[2]))%$n;
STDOUT->print ("v=$v\n");
 $v=$n-$v+1 if ($numbers1[$v-1] lt $numbers1[$n-$v]);
if ($x lt $numbers1[$v-1]) {$x=$numbers1[$v-1]};
$numbers2[0]=$numbers2[0]+$numbers2[2];
} until $numbers2[0] ge $numbers2[1];

############### ВЫВОД РЕЗУЛЬТАТА В ФАЙЛ ################
$fh2->print($x);


Категория: Программирование | Добавил: anna (03.09.2011) | Автор: Anna
Просмотров: 1422 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
» Поиск
» Учебные заведения
Брянский государственный университет академика И.Г. Петровского Брянская государственная инженерно-технологическая академия
Copyright MyCorp © 2021|Бесплатный конструктор сайтов - uCoz