P.S. буду очень благодарен тому, кто нормально сформулирует условие 250 DIV2.
27 2009-09-24 21:08:41
Тема: TopCoder SRM 449 (6 ответов, оставленных в Problems)
250 DIV2
Линк задачи :
http://www.topcoder.com/stat?c=problem_ … p;rd=13903
Решение
class MountainRoad{
public :
double findDistance(vector <int> a, vector <int> b){
double s = *max_element(b.begin(),b.end()) - *min_element(a.begin(),a.end());
s *= sqrt(2.0);
return s;
}
};
Проходит систем тест.
Люди, почему? : )
500 DIV 2
Линк :
http://www.topcoder.com/stat?c=problem_ … p;rd=13903
Решение реккурентное
if (x % 2 == 0) k = ((x + 1)/2)^2
else k = (x/2)^2
f(x) = f(x/2) + k
hokage объяснил
A couple of observations:
1. When x is odd, f(x) = x. (Since x times 1 = x)
2. When x is even, the greatest odd divisor of x is the number formed by truncating trailing 0's in the binary representation of x.
For instance, if x = 12(1100), f(x) = 3(11); if x = 20(10100), f(x) = 5(101).
This is because every even number can be written as product of an odd number and a power of 2(2, 4, 8,...)
3. 1 + 3 + 5 + ... + (2n - 1) = n^2
Однако, непонятно как мы находим k, и почему алгоритм правильный..
Помогите плз разобраться : )
28 2009-09-15 10:55:34
Тема: Все как всегда -- ММ или ВМК? : ) (1 ответов, оставленных в Offtopic)
Люди, посоветуйте, куда идти после 11 класса -- на мехмат мгу или на вмк мгу?
Вопрос наболевший, никто осмысленного на него ответить не может..мб вы сможете? : )
29 2009-09-15 10:51:45
Re: Алгоритм Паскаля (13 ответов, оставленных в Algo)
"кнута-морриса-пратта"* : )
30 2009-09-09 08:47:43
Re: Теоретический минимум для нубов. (10 ответов, оставленных в Offtopic)
Ну лично для меня олимпиадное программирование -- это только ради диплома на всеросе и радости от придуманного алгоритма : ) Вообще, я, видимо, после всероса 2010 вообще забью на такого рода проганье, ибо уже задолбало нереалне имхо % )
Кстати, как считаете, вот с таким подходом к жизни, куда стоит идти -- на ВМК МГУ или на МехМат МГУ?
И да, а кто откуда?( я имею в виду универы и факультеты : ) )
31 2009-09-09 08:41:03
Re: Теоретический минимум для нубов. (10 ответов, оставленных в Offtopic)
manof пишет:4. Граф является деревом если E/2 == V - 1, где E - кол-во ребер, V - кол-во вершин.
Вообще-то просто E = V - 1;
На самом деле это не совсем верно : )
Пример :
4 3 -- 4 вершины, 3 ребра
1 2 -- ребро из 1й вершины во 2ю
2 3
3 1
В рез-те ваш "алгоритм" скажет, что данный граф -- дерево, что вопиющий гон : )
Граф должен еще не иметь циклов : )
32 2009-09-09 08:35:32
Re: Алгоритм Паскаля (13 ответов, оставленных в Algo)
Хм, я думаю, что все-таки составители анкеты знают про треугольник Паскаля, и, если бы хотели узнать про него, так бы и написали "Треугольник Паскаля", а не стали бы вводить в заблуждения народ : )
товарищ 2rf прав -- этот пункт действительно был неким "детектором", проверял народ на вши : )
P.S. Некоторые попались :D, однако все равно поехали в ЛКШ..
33 2009-07-30 16:38:23
Re: Алгоритм Дейкстры с помощью кучи (15 ответов, оставленных в Algo)
кстати, можно в куче хранить не элементы, а индексы, ну и, разумеется, переопределить operator < на сравнение элементов в массиве d.
34 2009-07-07 20:37:07
Re: Triangles (21 ответов, оставленных в Problems)
кстати, если не лень, то
http://e-maxx.ru/forum/viewtopic.php?id=30
35 2009-07-07 20:33:31
Re: Triangles (21 ответов, оставленных в Problems)
нет, эти задачки везде были)
Ну, я, например, московская. И писал московскую, собственно)
36 2009-07-07 20:32:28
Re: Алгоритм Дейкстры с помощью кучи (15 ответов, оставленных в Algo)
e-maxx
Да-да!:)))
Ну в конце концов можно писать RMQ, что, собственно, я и советую всем пишущим на паскале.
Когда, например, меня добъют сишные строки, я открываю делфи и, если нужно быстро искать минимум-максимум, пишу RMQ. Это просто и удобно:)
Кстати, умею находить минимум/максимум на отрезке [l; r] с помощью RMQ в 5 строчек)
Кто короче?:)
38 2009-07-07 20:15:04
Re: Triangles (21 ответов, оставленных в Problems)
областная олипиады по информатике)
первый тур)
39 2009-07-07 20:08:21
Re: Алгоритм Дейкстры с помощью кучи (15 ответов, оставленных в Algo)
черт, там человек на паскале просил)
40 2009-07-07 20:07:09
Re: Triangles (21 ответов, оставленных в Problems)
не существует)
а задачка с области), тока там вроде 1500 было.
41 2009-07-07 19:58:31
Re: Быстрый поиск среднего элемента. (17 ответов, оставленных в Problems)
to Alexey
Да, запросы только на средний элемент. Нет, последовательность не обнавляется.
to e-maxx
Эм, давайте я дам пример для пояснения:
Последовательность :
i = 0 1 2 3 4 5 6 -- индекс.
1 4 5 8 3 7 0
Например, на текущем шаге нам нужно найти средний элемент на отрезке [1; 3].
Этот элемент будет 4.
Почему? Отстортим подмассив (4, 5, 8, 3) и получим (3, 4 , 5 ,8) соответственно.
Теперь найдем этот элемент -- его индекс (n - 1) / 2. n в даном случае = 5 => i = 2, т.е. 4.
Вот.
42 2009-07-07 19:41:20
Re: Алгоритм Дейкстры с помощью кучи (15 ответов, оставленных в Algo)
Хм, и действительно.
Спасибо, попробую так писать .
43 2009-07-07 11:37:00
Тема: Быстрый поиск среднего элемента. (17 ответов, оставленных в Problems)
Люди!
Подскажите, как можно решить следующую проблему:
Дана последовательность целых чисел.
Поступаю запросы на нахождения среднего элемента а отрезке [l; r].
Средним элементом в последовательности 0..n - 1 называют такой элемент, который имеет позицию (n - 1) / 2 в данной упорядоченной последовательности.
Как можно быстро находить такие элементы?
Заранее спасибо!
44 2009-07-07 11:23:27
Re: Алгоритм Дейкстры с помощью кучи (15 ответов, оставленных в Algo)
если интересно, то вот моя реализация Дейкстры, используя кучу STL.
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
const int inf = 1000;
struct ind
{
int i, num;
};
bool operator < (const ind &a, const ind &b)
{
return a.num < b.num;
}
int e[101][101];
int n, s, f;
priority_queue < ind> d1;
bool g[101];
vector < int > d(101);
//ifstream cin("input.txt");
//ofstream cout("output.txt");
void dijkstra(int s1, int s2)
{
int i, j, bj, bd;
g[s1] = true;
for (i = 1; i <= n; i++){
d[i] = e[s1][i];
ind f;
f.i = i;
f.num = -e[s1][i];
d1.push(f);
}
for (i = 1; i < n; i++)
{
bj = -1;
bd = inf;
ind f;
f = d1.top();
/*bool gg = d1.empty();
if (g[f.i]){
while (g[f.i] && d1.empty() == false)
{
d1.pop();
f = d1.top();
}
}*/
d1.pop();
if (d1.empty()) break;
bj = f.i;
bd = -f.num;
if (bj == -1) break;
g[bj] = true;
for (j = 1; j <= n; j++)
if (bd + e[bj][j] < d[j])
{
d[j] = bd + e[bj][j];
f.i = j;
f.num = -d[j];
d1.push(f);
}
}
if (d[s2] == inf) cout << "-1";
else cout << d[s2];
}
int main()
{
cin >> n >> s >> f;
int i, j;
if (s == f){
cout << "0";
return 0;
}
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++){
int k;
cin >> k;
if (k == -1 || i == j) e[i][j] = inf;
else e[i][j] = k;
}
for (i = 1; i <= n; i++)
d[i] = inf;
dijkstra(s, f);
return 0;
}