Ограничение памяти 64Mb Ввод стандартный ввод или input.txt Вывод стандартный вывод или output.txt N исполнителей танца (N –- четное число) расставлены в виде круга. Они пронумерованы числами от 1 до N, начиная с самого верхнего по часовой стрелке. Каждый тур танца заключается в том, что исполнители объединяются в пары (любые два исполнителя, соседние по кругу, могут образовать пару), после чего исполнители в каждой паре меняются местами.
При этом в первом туре и всех последующих турах с нечетными номерами исполнитель на первой позиции объединяется с исполнителем, находящимся по часовой стрелке от него. Аналогично объединяются следующие за ними по часовой стрелке два исполнителя и т.д.
На втором туре и последующих турах с четными номерами исполнитель на первой позиции объединяется с исполнителем, находящимся против часовой стрелки от него. Аналогично объединяются следующие за ними против часовой стрелки два исполнителя и т.д.
На рисунке приведена расстановка исполнителей (для N = 6) в начале танца, а также их расположение после первого и второго шага. Начало отсчета отмечено черной точкой.
Необходимо определить, кто будет находиться рядом с исполнителем Р (по обеим сторонам от него) через К туров танца.
Формат ввода В отдельных строках программе задаются три целых числа: N –- количество исполнителей (четное число), Р –- номер одного из исполнителей (1 ≤ P ≤ N ≤ 109) и К –- количество пройденных туров с начала танца (K ≤ 109).
Формат вывода Программа должна вывести два целых числа, разделенных пробелом: номера исполнителей, которые будут находиться рядом с исполнителем Р (по обеим сторонам от него) через К туров танца.
Искомые номера необходимо выводить в порядке возрастания.
Вычислим примеры. Для этого приведем дроби к общему знаменателю.
Так как общий знаменатель число 45, то 7/9 дробь умножим на 5/5. После этого делаем прибавку.
1) 2/45 + 7/9 = 2/45 + 7/9 × 5/5 = 2/45 + 35/45 = 37/45;
Дробь 2/5 умножим на 5/5.
2) 2/5 + 4/25 = 2/5 × 5/5 + 4/25 = 10/25 + 4/25 = 14/25;
Найдем произведение дробей 1/6 и 3/3, чтобы получили знаменатель 18. Результат прибавки можно сократить в два раза.
3) 1/6 + 7/18 = 1/6 × 3/3 + 7/18 = 3/18 + 7/18 = 10/18 = 5/9.
Делаем умножение 6/7 на 6/6.
4) 19/42 + 6/7 = 19/42 + 6/7 × 6/6 = 19/42 + 36/42 = 55/42;
Умножим дробь 5/8 на 4/4.
5) 3/32 + 5/8 = 3/32 + 5/8 × 4/4 = 3/32 + 20/32 = 23/32;
6) 3/8 + 1/56 = 3/8 × 7/7 + 1/56 = 21/56 + 1/56 = 22/56 = 11/28.
using System;
class Program
{
static void Main()
{
int x1 = 2, y1 = 1;
int x2 = 6, y2 = 5;
int x3 = 10, y3 = 1;
var a = Distance(x2, y2, x3, y3);
var b = Distance(x1, y1, x3, y3);
var c = Distance(x2, y2, x1, y1);
Console.WriteLine("S = {0}", Square(a, b, c));
Console.ReadKey();
}
//растояние между точками
static double Distance(int x1, int y1, int x2, int y2)
{
return Math.Sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}
//формула герона
static double Square(double a, double b, double c)
{
var p = (a + b + c) / 2;
return Math.Sqrt(p * (p - a) * (p - b) * (p - c));
}
// теорема косинусов
static double Angle(double a, double b, double c)
{
return Math.Acos((b * b + c * c - a * a) / (2 * b * c));
}
static bool IsAcuteAngel(double alpha)
{
return alpha < Math.PI / 2;
}
}