Сайт підготовки до олімпіади з інформатики

програмування в С++

Заняття 07.10.2015 PDF Печать E-mail
Добавил(а) Administrator   
15.01.16 21:03

Турнір Базові структури алгоритмів http://134.249.159.199/cgi-bin/new-client?contest_id=23
Логін school1-school10. Пароль 1.
Зауваження.

Структура програми

#include "iostream"
#include <math.h>
using namespace std;
int main()
{
int a,b;
double c;
cin>>a>>b;
c=a/b;
cout.precision(2);
cout<<fixed<<c<<endl;
} Заокруглення
double r;
cout.precision(2);
cout<<fixed<<r<<endl;


Робота з файлами

#include "fstream"
using namespace std;

ifstream cin("input.txt");
ofstream cout("output.txt");

Турнір Методика складання алгоритмів http://134.249.159.199/cgi-bin/new-client?contest_id=24
Логін school1-school10. Пароль 1.
Зауваження.
Тематика задач:
Довга арифметика
Системачислення
Сортування, пошук
Перебір
Бінарні дерева
Графи (пошук, жадібні, динамічне)
Обчислювальна геометрія

Всеукраїнськiй олімпіадi з інформатики NetOI-2015 (http://www.olymp.vinnica.ua/


Задача Розв’язок
Задача DEMO_A
         На площині задано координати двох відрізків AB і CD. Знайти спільну частину проекцій цих відрізків на вісь абсцис. 

Вхідні дані 
         Ви вводите з клавіатури 8 цілих чисел - координати точок  A, B, C, D. Кожне число не перевищує за абсолютною величиною 1000. 

Вихідні дані
         Ви виводите на екран одне число - спільну частину проекцій. Якщо спільна частина - порожня множина, вивести -1, якщо це одна точка - вивести 0. 

Приклад вхідних та вихідних даних 
Вхід: 2 2 7 5 3 4 8 1 
Вихід: 4 #include <iostream>

using namespace std;

int main()
{int x1,y1,x2,y2,x3,y3,x4,y4;
cin>>x1>>y1;
cin>>x2>>y2;
cin>>x3>>y3;
cin>>x4>>y4;
int x20=max(x1,x2);
int x10=min(x1,x2);
int x40=max(x3,x4);
int x30=min(x3,x4);

int v=min(x20,x40)-max(x30,x10);
if (v>=0)cout << v << endl; else cout<<-1;
return 0;
}
Задача DEMO_B
          Скільки натуральних чисел виду 2a3b5ca,b,c - невід'ємні цілі числа) належать відрізку [M;N]? 

Вхідні дані
         Ви вводите з клавіатури 2 цілих числа M та N. Кожне з чисел не перевищує за абсолютною величиною 10000.

Вихідні дані 
         Ви виводите на екран одне число - шукану кількість чисел. 

Приклад вхідних та вихідних даних 
Вхід: 10 20 
Вихід: 6 
#include <iostream>
using namespace std;
int main()
{long long int n,m,temp;
int k=0;
cin>>n>>m;
for(int i=n;i<=m;i++)
{
temp=i;
while (temp%2==0) temp=temp/2;
while (temp%3==0) temp=temp/3;
while (temp%5==0) temp=temp/5;
if (temp==1) k++;
}
cout << k << endl;
return 0;
}
Задача DEMO_C
         Дана послідовність N цілих чисел. Знайти найменший додатній елемент цієї послідовності. 

Вхідні дані 
         Ви вводите з клавіатури кількість чисел N та N цілих чисел - елементів цієї послідовності. Число N не перевищує 10000, кожний елемент послідовності не перевищує за абсолютною величиною 1000. 

Вихідні дані 
         Ви виводите на екран одне число - шуканий елемент послідовності. Якщо у послідовності немає додатніх елементів - вивести 0. 

Приклад вхідних та вихідних даних 
Вхід: 7 -4 4 -7 3 0 8 2 
Вихід: 2 
#include <iostream>

using namespace std;

int main()
{long long int n,minn;
int a[100000];
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
minn=2000;
for(int i=1;i<=n;i++)
if(a[i]<minn && a[i]>0) minn=a[i];

if(minn==2000) cout << 0 << endl; else cout << minn << endl;
return 0;
}
Задача DEMO_D
         Задано натуральне число N. Знайти найменше та найбільше число, яке складається з тих самих цифр та у такій самій кількості, що і N. 

Вхідні дані 
         Ви вводите з клавіатури число N (1£ N £2000000000). 

Вихідні дані 
         Ви виводите в одному рядку найменше число, а через пропуск - найбільше число. 

Приклад вхідних та вихідних даних 
Вхід: 7051 
Вихід: 1057 7510 
#include <iostream>
#include <string.h>
#include <string>
using namespace std;

int main()
{
char *n=new char[200000000];

cin>>n;
for(int i=0;i<strlen(n)-1;i++)
for(int j=0;j<strlen(n)-1;j++)
if(n[j]>n[j+1])swap(n[j],n[j+1]);
int k=0;
while(n[k]=='0')k++;
swap(n[0],n[k]);
cout << n << " ";
for(int i=0;i<strlen(n)-1;i++)
for(int j=0;j<strlen(n)-1;j++)
if(n[j]<n[j+1])swap(n[j],n[j+1]);
cout << n << endl;
return 0;
}
Задача DEMO_E

         Задано текстовий рядок. Вилучити з нього всі символи, що не є цифрами. Вважається, що рядок містить хоча б одну цифру. 

Вхідні дані 
         Ви вводите з клавіатури заданий рядок, довжина якого не перевищує 255 символів. 

Вихідні дані 
         Ви виводите на екран шуканий рядок. 

Приклад вхідних та вихідних даних 
Вхід: Ф11р88н 
Вихід: 1188 
#include <iostream>
#include <string.h>
#include <string>
using namespace std;

int main()
{
char *n=new char[200000000];

cin>>n;
for(int j=0;j<strlen(n);j++)
if(n[j]>='0'&&n[j]<='9')cout<<n[j];
cout << endl;
return 0;
}
Задача DEMO_F

         Дано K клітин шахової дошки. З'ясувати, чи всі вони одного кольору. 

Вхідні дані 
         Ви вводите з клавіатури кількість контрольних прикладів, потім число К - кількість клітин шахової дошки,а у наступних К рядках - координати клітин (натуральні числа, не більші 8). 

Вихідні дані 
         Ви виводите на екран для кожного приклада 1, якщо всі клітини одного кольору і 0, якщо це не так. 

Приклад вхідних та вихідних даних 

Вхід: 3
 
3  
1 2
8 1
8 5
2  
1 1
1 2
2  
1 1
2 2

Вихід: 101 
#include <iostream>

using namespace std;

int main()
{long long int n,k,f,a,b,black,white;
int r[10000];
cin>>n;
for(int i=1;i<=n;i++){
cin>>k;

white=0;black=0;
for(int j=1;j<=k;j++)
{
cin>>a>>b;
if ((a%2==0 && b%2==0 )|| (a%2==1 && b%2==1 )) black++; else white++;

}
if (white==k || black==k)r[i]=1;else r[i]=0;
}
for(int i=1;i<=n;i++)cout<<r[i];
cout << endl;
return 0;
}

Додатково
ІІ етап Всеукраїнської учнівської олімпіади з інформатики (м.Луцьк) 2014-2015н.р. - http://134.249.159.199/cgi-bin/new-client?contest_id=21
Тренувальний турнір до Всеукраїнської учнівської олімпіади з інформатики (м.Луцьк) 2014-2015н.р. - http://134.249.159.199/cgi-bin/new-client?contest_id=22

 

Статистика

Пользователей : 261
Статей : 225
Просмотрено статей : 105153

Вход/Регистрация

Нет