Add new attachment

Only authorized users are allowed to upload new attachments.

List of attachments

Kind Attachment Name Size Version Date Modified Author Change note
zip
testovi_cetvrti_elektronski_20... 36.4 kB 1 20-Aug-2015 17:35 Bojan Kostadinov

This page (revision-3) was last changed on 20-Aug-2015 17:35 by Bojan Kostadinov

This page was created on 20-Aug-2015 17:35 by Bojan Kostadinov

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Difference between version and

At line 1 changed one line
Во изработка...
!!Фибоначи
Во оваа задача се бараше да напишеме програма која ќе пресмета колку фибоначиеви броеви се наоѓаат во даден опсег (краевите на опсегот се читаат од стандарден влез). Бидејќи границите на опсегот беа мали (најмногу 20000), задачата може да се реши на тој начин што ќе ги креираме сите фибоначиеви броеви до горната граница на опсегот, и притоа ќе ги броиме само оние кои што се наоѓаат во границите на опсегот. \\ \\
Друго решение е да ги изминеме сите броеви од опсегот и за секој од нив да проверуваме дали е фибоначиев броеј. Тука треба да внимаваме да не користиме премногу едноставно рекурзивно решение (кое би ги повторувало пресметките повторно и повторно), бидејќи тоа би било премногу бавно. Следи изворниот код на официјалното решение:
%%prettify
{{{
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int countFibs(int a, int b)
{
int counter = 0;
vector<int> numbers;
int f=0, f1=1, f2=1;
numbers.push_back(f1);
numbers.push_back(f2);
while (f < 25000)
{
f = f1+f2;
f2 = f1;
f1 = f;
numbers.push_back(f);
}
for (int i=0; i<numbers.size(); i++)
if (numbers[i] >= a && numbers[i] <= b)
counter++;
return counter;
}
int main()
{
int start, end;
cin >> start >> end;
cout << countFibs(start, end) << endl;
return 0;
}
}}}
/%
Решението дадено погоре има линеарна сложеност O(n), која зависи од големината на опсегот.
!!Сортирање
Во оваа задача се бараше да напишеме програма која ќе сортира (подреди) неколку имиња, според просечната алфабетска позиција на секоја буква од името (позицијата на секоја буква во латиничната азбука). \\ \\
Јасно е дека треба да искористиме некој алгоритам за сортирање (во решението дадено подолу се користи алгоритамот Bubble Sort). Она што беше важно во задачата е и да приметиме дека е можно да има повеќе имиња со иста вредност, и дека доколку има такви нивниот редослед треба да остане непроменет (како што е даден во влезот). Алгоритмите за сортирање кои не ги изместуваат елементите со иста вредност се викаат стабилни алгоритми за сортирање. Доколку користиме C++ можеме да ја користите и функцијата stable_sort. Следи изворниот кодот на официјалното решение:
%%prettify
{{{
#include <iostream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
using namespace std;
vector<string> sortNames(vector<string> names)
{
for (int i=0; i<names.size()-1; i++)
for (int j=i+1; j>0; j--)
{
int sumi = 0, counti = names[j-1].size();
for (int p=0; p<names[j-1].size(); p++)
sumi += names[j-1][p] - 'A' + 1;
int sumj = 0, countj = names[j].size();
for (int p=0; p<names[j].size(); p++)
sumj += names[j][p] - 'A' + 1;
if (sumi*countj > sumj*counti)
{
string temp = names[j];
names[j] = names[j-1];
names[j-1] = temp;
}
}
return names;
}
int main()
{
int n;
cin >> n;
string name;
vector<string> names;
for (int i=0; i<n; i++)
{
cin >> name;
names.push_back(name);
}
names = sortNames(names);
for (int i=0; i<names.size(); i++)
cout << names[i] << endl;
return 0;
}
}}}
/%
Ова решение има сложеност О(N%%sup 2/%), каде N е бројот на имиња. Забележете дека во изворниот код даден погоре никаде не работиме со реални броеви (наместо делење за пронаоѓање на просечната позиција, тоа е заменето преку едноставни математички операции со множење).
!!Тест случаи
Тест случаите можете да ги симнете како .zip архива [тука|Четврти електронски натпревар/testovi_cetvrti_elektronski_2010.zip]. \\
Текстот и решенијата дадени погоре можете слободно да ги коментирате на форумот.
Version Date Modified Size Author Changes ... Change note
3 20-Aug-2015 17:35 4.183 kB Bojan Kostadinov to previous
2 20-Aug-2015 17:35 4.18 kB Bojan Kostadinov to previous | to last
1 20-Aug-2015 17:35 0.017 kB Bojan Kostadinov to last
« This page (revision-3) was last changed on 20-Aug-2015 17:35 by Bojan Kostadinov