Добавлен: 17.03.2024
Просмотров: 566
Скачиваний: 2
СОДЕРЖАНИЕ
учителя информатики КГУ «Гимназия №9» г.Караганды
Задача 1 (№ 1) A+B (Сложность: 1%)
Задача 3 (№ 903) Бисер (Сложность: 2%)
Задача 4 (№ 942) Олимпиада (Сложность: 2%)
Задача 5 (№ 195). Эния (Сложность: 3%)
Задача 7 (№ 33) Два бандита ( Сложность: 4%)
Задача 10 (№ 819) Прямоугольный параллелепипед
x=(h*(l+w)*2)/16; нужно учесть, что банка может быть неполной
Задача 14 (№ 780) Футбол (Сложность: 22%)
Выходные данные. В выходной файл OUTPUT.TXT выведите одно число – общее количество забитых мячей.
Задача 15 (№ 900) Три грибника (Сложность: 23%)
Задача 16 (№ 25) Больше-меньше (Сложность: 3%)
Задача 19 (№ 8)Арифметика (Сложность: 5%)
Задача 21 (№ 755) Сбор земляники (Сложность: 6%)
Задача 33 (№ 948) Сроки в книге (Сложность: 13%)
Задача 37 (№ 929) Игральные кубики (Сложность: 15%)
Задача 38 (№ 263) Метро (Сложность: 16%)
Задача 39 (№ 844) Поля (Сложность: 16%)
Задача 40 (№ 294) Болты и гайки (Сложность: 17%)
Выходные данные. В выходной файл выведите одно целое число – размер ущерба.
Задача 41 (№ 606)Треугольник – 3 (Сложность: 17%)
Задача 42 (№ 952) В автобусе (Сложность: 18%)
Задача 43 (№ 952) Кастинг (Сложность: 19%)
1, если в данном тесте требуется определить минимальное количество актеров;
Задача 45 (№ 68) Дом - Школа – Дом (Сложность: 21%)
Задача 49 (№ 692) Бинарные числа (Сложность: 8%)
Задача № 52 (№ 233). Автобусная экскурсия (Сложность: 14%)
Выходные данные. В выходной файл OUTPUT.TXT выведите ответ на задачу.
Задача 55 (№ 264) Оттепель(Сложность: 17%)
Задача 56 (№ 949) Фибоначчиева последовательность. (Сл.17%)
Задача 57 (№ 778) Офис (Сложность: 18%)
Задача 60 (№ 947) Карточки – 3 (Сложность: 22%)
Задача 62 (№ 716) Треугольник Максима (Сложность: 25%)
Задача 63 (№ 272) Сумма max и мin (Сложность: 26%)
Задача 66 (№ 149). Разворот (Сложность: 9%)
Выходные данные. В выходной файл OUTPUT.TXT выведите ответ на задачу.
Задача 69 (№ 637) NEERC (Сложность: 17%)
Задача 70 (№ 293) Налоги (Сложность: 20%)
Задача 74 (№ 324) Четырехзначный палиндром ( Сл.: 10%)
Задача 80 (№ 43) Нули (Сложность: 16%)
Задача 81 (№ 297) Кругляши (Сложность: 16%)
Задача 83 (№ 895) Крестики-нолики (Сложность: 19%)
Выходные данные. В выходной файл OUTPUT.TXT выведите ответ на задачу.
Задача 87 (№ 633) ACM World Finals (Сложность: 20%)
Задача 89 (№ 315) Наименьшая система счисления (Сл.: 26%)
#include
#include
using namespace std;
int main(){
int min =3*10000;
int max =-3*10000;
int k = 0;
int n;
while (scanf("%d", &n) == 1){
k++;
if ((k % 2 == 1) && (min>n)) min = n;
if ((k % 2 == 0) && (max
cout << max + min;
return 0; }
Задача 64 (№ 409) Железная дорога (Сложность: 26%)
При строительстве новой железной дороги возникли проблемы. Дорога пролегает по холмистой местности, однако сами пути должны идти строго горизонтально. Поэтому руководство строительной компании приняло решение выровнять поверхность земли на этом участке. Главная проблема состоит в том, что привозить или вывозить землю на стройку стоит 10000$ за кубический метр. Поскольку бюджет железной дороги невелик, этого нельзя себе позволить.
Поэтому главный инженер принял решение выровнять поверхность, используя только землю, из которой состоят холмы. Теперь самая сложная задача состоит в том, чтобы выяснить высоту над уровнем моря, на которой будет пролегать дорога. Это ответственное задание было поручено Вам.
Через каждый метр от начала участка была измерена высота над уровнем моря. Напишите программу, которая по данным измерений рассчитывает искомую высоту.
Входные данные
№ | INPUT.TXT | OUTPUT.TXT |
1 | 4 0 1 1 0 | 0.6666666667 |
2 | 5 2 2 2 2 2 | 2.0000000000 |
Выходные данные
В выходной файл выведите ответ на задачу с точностью, не меньшей 10-5.
#include using namespace std; int main() { int n ; double s,h1,h2; cin >> n; cin >> h1; s = 0; for (int i = 1; i < n; i++) { cin >> h2; s=s+(h1+h2)/2; h1=h2;} s=s/(n-1); printf("%.5f", s); return 0; } | Холм может состоять из трапеций, прямоуголь-ников или треугольников со стороной =1 м. S трапеции= =(h1+h2)/2 S прямоугольника (при h1=h2) и S треугольника (при h2=0) сводятся к той же формуле. Что бы не использовать массив для каждой следующей фигуры превращаем h2 в h1 и читаем h2. Полученную площадь холма длим на (n-1), т.к. участков на 1 меньше чем точек измерения |
Задача 65 (№ 779) Строительство школы (Сложность: 30%)
В деревне Интернетовка все дома расположены вдоль одной улицы по одну сторону от нее. По другую сторону от этой улицы пока ничего нет, но скоро все будет – школы, магазины, кинотеатры и т.д.
Для начала в этой деревне решили построить школу. Место для строительства школы решили выбрать так, чтобы суммарное расстояние, которое проезжают ученики от своих домов до школы, было минимально.
План деревни можно представить в виде прямой, в некоторых целочисленных точках которой находятся дома учеников. Школу также разрешается строить только в целочисленной точке этой прямой (в том числе разрешается строить школу в точке, где расположен один из домов – ведь школа будет расположена с другой стороны улицы).
Напишите программу, которая по известным координатам домов учеников поможет определить координаты места строительства школы.
№ | INPUT.TXT | OUTPUT.TXT |
1 | 4 1 2 3 4 | 3 |
2 | 3 -1 0 1 | 0 |
Выходные данные. В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — координату точки, в которой лучше всего построить школу. Если ответов несколько, выведите наибольший из них.
#include using namespace std; int main(){ long long int a, k, n; cin>>n; k=n/2+1; for(int i=1;i<=n;i++){ cin>>a; if(i==k) cout< return 0; } | Школа должна стоять посередине. Если домов четное количество, то n/2+1 (Если ответов несколько, выведите наибольший из них). Находим координату среднего дома |
Массивы
Задача 66 (№ 149). Разворот (Сложность: 9%)
Дано натуральное число N и последовательность из N элементов. Требуется вывести эту последовательность в обратном порядке.
Входные данные. В первой строке входного файла записано натуральное число N (N ≤ 103). Во второй строке через пробел идут N целых чисел, по модулю не превосходящих 103 - элементы последовательности.
Выходные данные
В выходной файл выведите заданную последовательность в обратном порядке.
# include
№ | INPUT | OUTPUT |
1 | 3 1 2 3 | 3 2 1 |
int main(){
int a[1000],n;
cin>>n;
for (int i = 1; i <= n; i++){
cin>>a[i]; }
for (int i = n; i >= 1; i--){
cout<
return 0; }
Задача 67 (№ 284) Подмассив массива (Сложность: 15%)
№ | INPUT | OUTPUT |
1 | 6 1 2 3 4 5 6 5 1 1 2 6 3 4 5 6 2 4 | 1 2 3 4 5 6 3 4 5 6 2 3 4 |
Входные данные
Первая строка входного файла содержит число n (1 <= n <= 1000) - количество элементов в массиве а. Во второй строке содержатся числа a1, a2, … , аn разделенные пробелом. Все аi находятся в диапазоне от -231 до 231 - 1. В третьей строке находится m (1 <= m <= 100) — количество подмассивов, которые необходимо вывести. Следующие m строк содержат пары чисел ik, jk (1 <= ik <= jk <= n).
Выходные данные. В выходной файл OUTPUT.TXT для каждой пары (ik,jk) в отдельной строке выведите подмассив f(ik,jk).
# include using namespace std; int main(){ int n,j,m,b,c; int a[1001]; cin >>n; for(int i = 1; i <= n; ++i){ cin>>a[i]; } cin>>m; for (int i = 1; i <= m; ++i){ cin>>b>>c; for (int j = b; j <= c; ++j){ cout< cout< return 0; } | |
Задача 68 (№ 496) Сбор черники (Сложность: 17%)
В фермерском хозяйстве в Карелии выращивают чернику. Она растет на круглой грядке, причем кусты высажены только по окружности. Таким образом, у каждого куста есть ровно два соседних. Всего на грядке растет N кустов.
Эти кусты обладают разной урожайностью, поэтому ко времени сбора на них выросло различное число ягод – на i-ом кусте выросло ai ягод.
№ | INPUT.TXT | OUTPUT |
1 | 4 1 2 3 4 | 9 |
2 | 3 1 2 3 | 6 |
Входные данные. Первая строка входного файла содержит целое число N (3 <= N <= 1000) – количество кустов черники. Вторая строка содержит N целых положительных чисел a1, a2, ..., aN – число ягод черники, растущее на соответствующем кусте. Все ai не превосходят 1000.
Выходные данные. В выходной файл OUTPUT.TXT выведите ответ на задачу.
#include using namespace std; int main() { int N, arr[1002], max = 0; cin >> N; for (int i = 0; i < N; i++) {cin >> arr[i]; } arr[N] = arr[0]; arr[N + 1] = arr[1]; for (int i = 1; i <= N; i++) { if (arr[i - 1] + arr[i] + arr[i + 1] > max) max = arr[i - 1] + arr[i] + arr[i + 1]; } cout << max; return 0; } | т.к.грядка круглая, то нужно сложить последний куст с первым и нулевым. Можно просто перебросить их в конец массива. |
Задача 69 (№ 637) NEERC (Сложность: 17%)
В полуфинале студенческого чемпионата мира по программированию NEERC (http://neerc.ifmo.ru) участвуют команды из n институтов. Участники для проведения соревнований распределяются по k залам, каждый из которых имеет размеры, достачные для размещения всех команд от всех институтов. При этом по правилам соревнований в одном зале может находиться не более одной команды от института.
Многие институты уже подали заявки на участие в полуфинале. Оргкомитет полуфинала хочет допустить до участия максимально возможное количество команд. При этом, разумеется, должна существовать возможность рассадить их по залам без нарушения правил.
№ | INPUT | OUTPUT |
1 | 3 1 2 4 3 | 6 |
2 | 3 1 2 4 4 | 7 |
Входные данные
Первая строка входного файла INPUT.TXT содержит число n - число институтов, подавших заявки. Вторая строка входного файла содержит n чисел a1, …, an (ai - это количество команд, заявленных от института номер i). Последняя строка входного файла содержит число k - количество залов, в которых проходят соревнования.
Все числа во входном файле целые, положительные и не превосходят 10000.
Выходные данные.
В выходной файл выведите одно целое число - ответ на задачу.
#include using namespace std; int main() { int n,k,a[10000],s=0,x; cin>>n; for(int i=0;i cin>>k; for(int i=0;i if(a[i]>k) x=k; else x=a[i]; s=s+x; } cout< return 0; } | Если команд больше чем залов, то берем столько команд, сколько залов. Иначе берем все команды. |
Задача 70 (№ 293) Налоги (Сложность: 20%)
В некотором государстве действует N фирм, конкурирующих между собой. У каждой фирмы есть некоторая прибыль в год, равная V[i] американских рублей. У царя есть любимые фирмы, а есть нелюбимые. Соответственно, налог для всех фирм разный и назначается царем в индивидуальном порядке. Налог на i-ую фирму равен p[i] %. Собиратели статистики решили посчитать, с какой фирмы в государственную казну идет наибольший доход (в казну идут все налоги). К сожалению, они не учили в детстве ни математику, ни информатику (так что учитесь, дети!), и их задача резко осложняется. Помогите им в этой нелегкой задаче.
№ | INPUT | OUTPUT |
1 | 1 1 1 | 1 |
2 | 2 1 2 3 2 | 2 |
3 | 3 100 1 50 0 100 3 | 3 |
Выходные данные. В выходной файл выведите одно число - номер фирмы, от которой государство получает наибольший налог. Если таких фирм несколько, выведите фирму с наименьшим номером.
#include
#include
using namespace std;
int main(){
int n;float max=0;int f=0;int i;float money[100],pr[100]; float nal[100];int h=0;
cin>>n;
for(i=0;i
for(i=0;i
for(i=0;i
nal[i]=money[i]/100*pr[i];
if(nal[i]>max) {max=nal[i];h=i; } }
cout<
Задача 71 (№ 912) Одежда (Сложность: 24%)
Несмотря на небольшую площадь, территорию Волшебной страны населяет множество народов, различных как по культуре и внешнему облику, но говорящих на одном языке. Каждый народ предпочитает носить одежду определённого цвета, который отличается от цвета одежды других народов. Народы имеют разные традиции, порой традиции одних народов противоречат традициям других народов. Поэтому жители каждого города следуют традициям того народа, представителей которого проживает в этом городе больше всего. Если оказывается, что таких народов несколько, все жители города следуют традициям самого миролюбивого народа с белым цветом одежды (белый цвет обозначается нулём).
№ | INPUT.TXT | OUTPUT.TXT |
1 | 6 1 2 5 2 1 2 | 2 |
2 | 4 5 5 4 4 | 0 |
Входные данные. Первая строка входного файла INPUT.TXT содержит число N - количество жителей города, которых видит путешественник (1 ≤ N ≤ 104). Вторая строка теста содержит N натуральных чисел, разделенных пробелами. Каждое число сi – это цвет одежды i-го жителя (1 ≤ ci ≤ 100).
Выходные данные. В выходной файл OUTPUT.TXT выведите единственное целое число – цвет одежды народа, традициям которого следуют жители города.
#include using namespace std; int main() { int n,k,a,z; int arr[100]; for(int i=0;i<=100;i++) {arr[i]=0;} cin>>n; for(int i=1;i<=n;i++) { cin>>a; arr[a]++; } int max=0; z=0; for(int i=1;i<=100;i++) { if(arr[i]>max) {max=arr[i]; z=i; }} k=0; for(int i=1;i<=100;i++){ if(max==arr[i]) k++; } if (k==1) cout< return 0;} | Будем использовать сортировку подсчетом. Создаем и обнуляем массив, размер которого= количеству цветов. i-я ячейка соответствует i-му цвету. Нужно подсчитать количество каждого цвета. Читаем цвет (а) и увеличиваем соответствующую ячейку на 1. Находим самый популярный цвет (мах) Проверяем условие: если оказывается, что таких народов (мах) несколько, то выбираем белый цвет, который обозначается нулём |
Задача 72 (№ 534) Клавиатура – 2 (Сложность: 25%)
Всем известно, что со временем клавиатура изнашивается, и клавиши на ней начинают залипать. Конечно, некоторое время такую клавиатуру еще можно использовать, но для нажатий клавиш приходиться использовать большую силу. При изготовлении клавиатуры изначально для каждой клавиши задается количество нажатий, которое она должна выдерживать. Если знать эти величины для используемой клавиатуры, то для определенной последовательности нажатых клавиш можно определить, какие клавиши в процессе их использования сломаются, а какие – нет. Требуется написать программу, определяющую, какие клавиши сломаются в процессе заданного варианта эксплуатации клавиатуры.
Входные данные. Первая строка входного файла содержит целое число N (1 ≤ N ≤ 100) – количество клавиш на клавиатуре. Вторая строка содержит n целых чисел – с1, с2, … , сN, где сi (1 ≤ сi ≤ 100000) – количество нажатий, выдерживаемых i-ой клавишей. Третья строка содержит целое число K (1 ≤ K ≤ 100000) – общее количество нажатий клавиш, и последняя строка содержит K целых чисел pj (1 ≤ pj ≤ N) – последовательность нажатых клавиш.
№ | INPUT.TXT | OUTPUT |
1 | 5 1 50 3 4 3 16 1 2 3 4 5 1 3 3 4 5 5 5 5 5 4 5 | yes no no no yes |
В выходной файл OUTPUT.TXT необходимо вывести N строк, содержащих информацию об исправности клавиш. Если i-ая клавиша сломалась, то i-ая строка должна содержать слово "yes" (без кавычек), если же клавиша работоспособна – слово "no".
#include #include using namespace std; int main(){ int n,k,p; int key[2][101]; cin>>n; for(int j=1;j<=n;j++){cin>>key[0][j];} for(int j=1;j<=n;j++){key[1][j]=0;} cin>>k; for(int i=1;i<=k;i++){ cin>>p; key[1][p]++; } for(int i=1;i<=n;i++){ if(key[0][i]>=key[1][i]) cout<<"no"< else cout<<"yes"< return 0;} | Задача также решается сортировкой подсчетом. Для решения используется массив из двух строк: 0 строка – допустимое число нажатий клавиши, 1 строка- сколько раз была нажата клавиша
|
Задача 73 (№ 579) Модуль суммы (Сложность: 25%)
Дана последовательность целых чисел. Требуется найти подпоследовательность заданной последовательности с максимальным модулем суммы входящих в нее чисел. Напомним, что модуль целого числа x равняется x, если x ≥ 0 и -x, если x < 0.
Входные данные. Первая строка входного файла INPUT.TXT содержит натуральное число n (1 ≤ n ≤ 10000) - длину последовательности. Во второй строке записаны n целых чисел, по модулю не превосходящих 10000. Выходные данные. В первой строке выходного файла OUTPUT.TXT выведите длину l выбранной вами подпоследовательности. Во второй строке должны быть записаны l различных чисел, разделенных пробелами - номера выбранных членов последовательности.
#include #include using namespace std; int main() { int n,k,a[10000]; int kp=0; int ko=0; int Sp=0; int So=0; cin>>n; for(int i=1;i<=n;++i){ cin>>a[i]; if (a[i]>0) {Sp=Sp+a[i]; kp++;} if (a[i]<0) {So=So+a[i]; ko++;} } if (Sp>abs(So)){ cout< for(int i=1;i<=n;++i){ if (a[i]>0) cout< } if (Sp cout< for(int i=1;i<=n;++i){ if (a[i]<0) cout< } if (Sp==0 and So==0) cout<<"1 1"; return 0; } |
Не совсем корректная постановка задачи. Нужно найти сумму положительных чисел и сумму отрицательных чисел и сравнить их по модулю. Если больше сумма положительных чисел, то выводим количество положительных чисел, находим их и выводим номера. Иначе выводим количество отрицательных чисел и их номера Если даны все нули, то ответ 1 1 |