четверг, 3 января 2019 г.

C#

Лифт

Чтобы поднять на N-й этаж M-этажного дома новый холодильник, Витя вызвал бригаду грузчиков. Оплата работы грузчиков производится так: за подъем холодильника на один этаж требуется заплатить 200 рублей, за спуск на один этаж - 100 рублей. За подъем и спуск на лифте плата не взимается. Несмотря на то, что в Витином доме есть лифт, ему возможно все же придется заплатить грузчикам, поскольку лифт останавливается только на каждом K-м этаже, начиная с первого (то есть на этажах с номерами 1K+12K+13K+1, ...). Требуется вычислить, какой минимальной суммы денег достаточно, чтобы грузчики доставили холодильник с первого этажа на N-й.
Входные данные
Во входном файле записаны три числа: M (2 ≤ M ≤ 100), N (2 ≤ N ≤ M) и K (2 ≤ K ≤ M-1), разделенные пробелами.
Выходные данные
Выведите одно число - минимальную стоимость подъема холодильника.
Ліміт часу 1 секунда
Ліміт використання пам'яті 64 MiB
Вхідні дані
Sample 1
20 7 4

Sample 2
20 7 2
Вихідні дані
Sample 1
200

Sample 2
0

public static void Main(string[] args) { string setir = Console.ReadLine(); var massiv = setir.Split(' '); int m = int.Parse(massiv[0]); int n = int.Parse(massiv[1]); int k = int.Parse(massiv[2]); int c = ((n - 1)/k)*k + 1; int min = (n - c)*200; if (c + k <= m) min = Math.Min(min, (c + k - n)*100); Console.WriteLine(min); }

Паліндром

Паліндром - це рядок, який однаково читається зліва направо і зправа наліво. Складіть програму, яка перевіряє, чи є заданий текст паліндромом. Не забудьте, що при читанні пропуск ніяк не вимовляється.

Вхідні дані

Рядок S (|S| ≤ 255) складається з рядкових латинських літер і пропусків. Під |S| розуміється довжина рядка.

Вихідні дані

Вивести "YES", якщо текст є паліндромом та "NO" інакше.
Ліміт часу 1 секунда
Ліміт використання пам'яті 128 MiB
Вхідні дані #1
palindrom
Вихідні дані #1
NO
Вхідні дані #2
a roza upala na lapu azora
Вихідні дані #2
YES

private static string Gu(string x) { string y = ""; int len = x.Length; for (int i = 0; i < len; i++) y = x[i] + y; return y; } public static void Main(string[] args) { string s = Console.ReadLine(); s = s.Replace(" ", ""); Console.WriteLine(s == Gu(s) ? "YES" : "NO"); } }

Площа чотирикутника

Визначити площу чотирикутника з вершинами A(x1,y1), B(x2,y2), C(x3,y3), D(x4,y4).

Вхідні дані

В одному рядку задано координати послідовних вершин чоторикутника. Всі числа цілі та не перевишують за модулем 100.

Вихідні дані

Вивести площу чотирикутника, округлену до цілих.
Вхідні дані
1 4 5 4 4 2 2 1
Вихідні дані
8

var x1,y1,x2,y2,x3,y3,x4,y4: Integer; s: Real;
begin
  readln(x1,y1,x2,y2,x3,y3,x4,y4);
  s:=0.5*Abs((x1*y2-y1*x2)+(x2*y3-y2*x3)+(x3*y4-y3*x4)+(x4*y1-y4*x1));
  writeln(s:0:0);
end.



Степеневі числа

Число n називається степеневим, якщо його можна отримати з деякого числа множенням на себе хоча б один раз. Наприклад, 4 степеневе число, оскільки 4 = 2 · 227 також степеневе число, бо 27 = 3 · 3 · 3, а 28 не є степеневим числом. Визначити, чи є задані числа степеневими.

Вхідні дані

У першому рядку записано одне натуральне число n - кількість досліджуваних чисел (1 ≤ n ≤ 10). У другому рядку через пропуск записано nчисел - досліджувані числа. Кожне з них більше 1 і менше 109.

Вихідні дані

Вивести n рядків. В i-му рядку записати YES, якщо i-те число є степеневим і NO у противному випадку.
public static void Main(string[] args) { int n = int.Parse(Console.ReadLine()); string setir = Console.ReadLine(); var massiv = setir.Split(' '); int max = 0; int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = int.Parse(massiv[i]); if (a[i] > max) max = a[i]; } HashSet<long> siyahi = new HashSet<long> {1}; int log = (int) Math.Log(max, 2) + 1; int kok = (int) Math.Sqrt(max) + 1; for (int i = 2; i < kok; i++) { for (int j = 2; j < log; j++) { long cari = (long) Math.Pow(i, j); if (cari <= max && !siyahi.Contains(cari)) siyahi.Add(cari); } } for (int i = 0; i < n; i++) { Console.WriteLine(siyahi.Contains(a[i]) ? "YES" : "NO"); }

Стовбці

Задано таблицю n × n, заповнену цілими числами. Петро Перший вважає стовбець хорошим, якщо той містить число x. Потрібно для кожного стовбця вияснити, чи є той хорошим.

Вхідні дані

У першому рядку задано число x, яке не перевищує по модулю 2 *109. У другому рядку задано число n (1 ≤ n ≤ 100). Кожен з наступних nрядків містить по n цілих чисел, що не перевищують за модулем 2 *109 - числа у комірках таблиці.

Вихідні дані

Для кожного стовбця в окремому рядку виведіть YES, якщо в ньому є число x, і NO у протилежному випадку.
Ліміт часу 1 секунда
Ліміт використання пам'яті 128 MiB
Вхідні дані #1
1
2
0 1
0 0
Вихідні дані #1
NO
YES
 private static string Yo(int[,] a, int j, int x)
        {
            int n = (int) Math.Sqrt(a.Length);
            for (int i = 0; i < n; i++)
            {
                if (a[i, j] == x) return "YES";
            }
            return "NO";
        }

        public static void Main(string[] args)
        {
            int x = int.Parse(Console.ReadLine());
            int n = int.Parse(Console.ReadLine());
            int[,] a = new int[n, n];
            for (int i = 0; i < n; i++)
            {
                string setir = Console.ReadLine();
                var massiv = setir.Split(' ');
                for (int j = 0; j < n; j++) a[i, j] = int.Parse(massiv[j]);
            }
            for (int j = 0; j < n; j++) Console.WriteLine(Yo(a, j, x));
        }