Вопрос Помогите решить олимпиаду по информатике C#

AHK <3
Начинающий
Статус
Оффлайн
Регистрация
11 Мар 2018
Сообщения
133
Реакции[?]
23
Поинты[?]
4K
Задача 1: Автобусные остановки
Автобусные остановки расположены через каждые K метров от начала улицы, то есть на расстоянии 0, K, 2K, 3K и т.д. метров от начала. Света прошла от начала улицы N метров, после чего устала и захотела сесть на автобус. Определите, сколько метров нужно пройти Свете до ближайшей остановки.

Входные данные
Программа получает на вход два целых числа K и N, записанных в отдельных строках. 1 ≤ K ≤ 2×109, 1 ≤ N ≤ 2×109.

Выходные данные
Программа должна вывести одно целое число — расстояние до ближайшей остановки.

Система оценивания
Решение, правильно работающее только для случаев, когда числа K и N не превосходят 10000, будет оцениваться в 60 баллов.

Пример
ВводВыводПояснение
600
2000
200Остановки расположены на расстоянии 0, 600, 1200, 1800 и т.д. метров.
Света прошла 2000 метров, до ближайшей остановки нужно идти 200 метров.

1604037857199.png

Задача 2: Наборы пирожных
На складе кондитерской фабрики хранятся пирожные двух видов — круассаны и эклеры. Круассанов A штук, а эклеров — B штук. Есть неограниченный запас подарочных коробок, в каждую коробку можно положить только три пирожных. При этом требуется, чтобы в коробке были пирожные обоих видов, то есть в одну коробку можно положить два круассана и один эклер или один круассан и два эклера.

Определите, можно ли упаковать все имеющиеся пирожные в коробки и выведите подходящий способ размещения пирожных по коробкам.

Входные данные
Программа получает на вход два целых числа A и B, записанных в отдельных строках. 1 ≤ A ≤ 109, 1 ≤ B ≤ 109.

Выходные данные
Если можно разложить все пирожные по коробкам в соответствии с условием задачи, программа должна вывести два целых числа. Первое число равно количеству коробок, в которых лежит два круассана и один эклер. Второе число равно количеству коробок, в которых лежит один круассан и два эклера.

Если разложить все пирожные по коробкам нужным способом нельзя, программа должна вывести одно число −1.

Система оценивания
Решение, правильно работающее только для случаев, когда числа A и B не превосходят 100, будет оцениваться в 60 баллов.

Примеры
ВводВыводПояснение
4
5
1 2Нужно взять одну коробку с двумя круассанами и одним эклером и две коробки с одним круассаном и двумя эклерами. Всего получится 4 круассана и 5 эклеров.
5
3
−1Разложить пирожные по коробкам нельзя.

Задача 3: Мирные ладьи
На шахматной доске размером N × N расставлено N шахматных ладей не бьющих друг друга, то есть на каждой вертикали и каждой горизонтали стоит ровно одна ладья.

1604038116755.png
Шахматную доску повернули на 90° по часовой стрелке. Выведите получившуюся расстановку ладей.


Входные данные
Первая строка входных данных содержит целое число N, 1 ≤ N ≤ 105 — размер доски. Следующие N строк содержат по одному числу от 1 до N, а именно, в i-й строке записано число ai — номер вертикали, в которой стоит ладья на i-й горизонтали. В этой задаче горизонтали нумеруются числами от 1 до N сверху вниз, вертикали нумеруются числами от 1 до N слева направо (см. рисунок).

Выходные данные
Программа должна вывести N чисел — расстановку ладей после поворота в таком же формате.

Система оценивания
Решение, правильно работающее только для случаев, когда N ≤ 5, будет оцениваться в 30 баллов.

Решение, правильно работающее только для случаев, когда N ≤ 5, будет оцениваться в 60 баллов.

Пример
ВводВыводПояснение
5
4
2
3
5
1
1
4
3
5
2
Пример соответствует рисункам. Первоначально ладьи стояли в столбцах 4, 2, 3, 5, 1 при перечислении их по строкам сверху вниз. После поворота ладьи стоят в столбцах 1, 4, 3, 5, 2.

Задача 4: Таблица
Бесконечную таблицу, строки и столбцы которой пронумерованы целыми числами начиная с 1 сверху вниз и слева направо, заполняют целыми числами 1, 2, 3 и т.д. Числа выписываются в соседние клетки по границам квадратов увеличивающегося размера (см. рисунок).

1604038093176.png
Дано число n, определите номер строки и номер столбца, в котором окажется это число.

Входные данные
Программа получает на вход одно целое число n, 1 ≤ n ≤ 1018.

Обратите внимание, что значение n может быть больше, чем возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные числа (тип int64 в языке Pascal, тип long long в C и C++, тип long в Java и C#).

Выходные данные
Программа должна вывести два целых числа: номер строки и номер столбца, в которых находится число n в этой таблице. Запись выводимых чисел должна содержать только цифры, вывод действительных чисел в ответе считается неверным.

Система оценивания
Решение, правильно работающее только для случаев, когда n ≤ 100, будет оцениваться в 20 баллов.

Решение, правильно работающее только для случаев, когда n ≤ 104, будет оцениваться в 40 баллов.

Решение, правильно работающее только для случаев, когда n ≤ 109, будет оцениваться в 60 баллов.

Пример
ВводВывод
154 2

Если сможете решить любую из, буду благодарен :roflanEbalo:
 
Татшик
Забаненный
Статус
Оффлайн
Регистрация
22 Мар 2019
Сообщения
32
Реакции[?]
5
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Какой класс?
 
Начинающий
Статус
Оффлайн
Регистрация
27 Фев 2019
Сообщения
4
Реакции[?]
1
Поинты[?]
0
задание 1

#include <iostream>
#include <algorithm>

int main() {
unsigned k, n;
std::cin >> k >> n;
std::cout << std::min(n % k, k - n % k);
return 0;
}
на с++
задание 3 на с++

#include <iostream>

using namespace std;

int main()

{

int N, b;

cin >> N;

int B[N][1];

for(int i=0; i < N; i++){

cin >> b;

B[b-1][0]=N-i;

}

for(int j=0; j <N; j++)

cout << B[j][0] << endl;

return 0;

}
 
Начинающий
Статус
Оффлайн
Регистрация
27 Фев 2019
Сообщения
4
Реакции[?]
1
Поинты[?]
0
Начинающий
Статус
Оффлайн
Регистрация
13 Ноя 2020
Сообщения
4
Реакции[?]
1
Поинты[?]
0
Задача 1, на 90 балов, Python

Python:
k = int(input())

n = int(input())

t = int(n%k)

r = int(k/2)

if t < r:

    print(n%k)

else:

    print(k-t)
 
Последнее редактирование модератором:
Начинающий
Статус
Оффлайн
Регистрация
13 Ноя 2020
Сообщения
4
Реакции[?]
1
Поинты[?]
0
Задача 3, на 100 балов, C++
Может сможешь понять логику и переписать на С#


C++:
#include <iostream>


using namespace std;


int main()


{


   int N, b;


   cin >> N;


   int B[N][1];


   for(int i=0; i < N; i++){


           cin >> b;


           B[b-1][0]=N-i;


   }


   for(int j=0; j <N; j++)


       cout << B[j][0] << endl;


   return 0;


}
 
Последнее редактирование модератором:
Начинающий
Статус
Оффлайн
Регистрация
13 Ноя 2020
Сообщения
4
Реакции[?]
1
Поинты[?]
0
Задача 2, на 60 балов, Python

Python:
n = int(input())

m = int(input())

i = 0

j = 0


if n/m == 2:

    i = m

    j = 0

    p = str(int(i)) + ' ' + str(int(j))

else:

    if m/n == 2:

        j = m/2

        i = 0

        p = str(int(i)) + ' ' + str(int(j))

    else:

        if n==m and n%3==0:

            i = int(n/3)

            j = int(m/3)

            p = str(int(i)) + ' ' + str(int(j))

        else:

            if n>m:

                k = n-m

                if k>m and (n-k)%2 == 0:

                    i = k+((n-k)/2)

                    j = n - (i*2)

                    p = str(int(i)) + ' ' + str(int(j))

                else:

                    p = -1

  

                if k<m and (m-k)%3 == 0:

                    i = k+((m-k)/3)

                    j = n - (i*2)

                    p = str(int(i)) + ' ' + str(int(j))

                else:

                    p = -1

            if n<m:

                k = m-n

                if k>n and (m-k)%2 == 0:

                    i = k+((m-k)/2)

                    j = m - (i*2)

                    p = str(int(i)) + ' ' + str(int(j))

                else:

                    p = -1

  

                if k<n and (n-k)%3 == 0:

                    i = k+((n-k)/3)

                    j = m - (i*2)

                    p = str(int(i)) + ' ' + str(int(j))

                else:

                    p = -1


print(p)
 
Последнее редактирование модератором:
Сверху Снизу