It seems that the search feature (in the top right corner) only works for handles but fails to find blogs etc. I think it was like this for at least a week now.
It would be nice to see it fixed. Or is it broken only for me?
It seems that the search feature (in the top right corner) only works for handles but fails to find blogs etc. I think it was like this for at least a week now.
It would be nice to see it fixed. Or is it broken only for me?
Иногда встречаются задачи с дву/многомерными массивами, в которых есть несколько очевидных случаев возможного выхода за пределы массива. Они просты и понятны, но для их обработки порой требуется много "лишнего" кода (однажды автор написал 16 if-ов!). Я придумал простой способ, который поможет избежать этого. Возможно, это покажется вам очевидным, но лично мне так не казалось еще вчера. Думаю, я не один такой.
Пример задачи (как можно более простой, взята отсюда http://informatics.mccme.ru/mod/statements/view3.php?chapterid=946 ):
Дана прямоугольная доска N × N (N <= 20). Конь стоит в верхнем левом углу доски. Выведите количество способов добраться конём до правого нижнего угла доски, если конь может ходить только так:
Вот обычное решение этой задачи динамическим программированием:
#include <iostream>
int n, dp[20][20];
int main() {
std::cin >> n;
dp[0][0] = 1;
for (int i = 1; i < n; i++) {
for (int j = 1; j < n; j++) {
if (i-2 >= 0 && j-1 >= 0)
dp[i][j] += dp[i-2][j-1];
if (i-1 >= 0 && j-2 >= 0)
dp[i][j] += dp[i-1][j-2];
}
}
std::cout << dp[n-1][n-1] << '\n';
}
Казалось бы, ничего сложного. Но тем не менее его можно упростить:
#include <iostream>
int n, dp[20][20];
int f(int i, int j) {
return (i < 0 || j < 0) ? 0 : dp[i][j];
}
int main() {
std::cin >> n;
dp[0][0] = 1;
for (int i = 1; i < n; i++)
for (int j = 1; j < n; j++)
dp[i][j] = f(i-2, j-1) + f(i-1, j-2);
std::cout << dp[n-1][n-1] << '\n';
}
В данном примере не видно большой разницы, но в некоторых случаях это может действительно сократить код, тем самым уменшив возможность ошибки. Это способ хорош еще тем, что если вдруг надо будет возвращать не 0 в случае выхода за пределы, а, например -inf, то это легко сделать.
Кстати, функцию f можно сделать более гибкой, передав ей массив/вектор в качестве аргумента, например: int f(vector<int>& v, int i, int j) {
, а можно даже использовать C++14 и написать так: int f(auto& v, int i, int j) {
.
Всем привет! Я хотел бы поучаствовать в Московской командной олимпиаде школьников по программированию, но так вышло, что я не знаю никого, кто мог бы выступить со мной в команде. Возможно, найдутся такие люди, которые тоже хотели бы поучаствовать, но, как и я, не имеют команды. О себе: мне 17 лет, учусь в 11 классе. Спортивным программированием занимаюсь относительно недавно, но относительно успешно. Теорию знаю неплохо, но опыта написания мало (разве что кроме графов). Пишу на C++, также знаю Python. Закончил параллель B в ЛКЛ (аналог ЛКШ). В командной олимпиаде участвовал лишь раз (в ЛКЛ), но команда заняла 1 место :3 . Участвовать хочу в А, конечно же. Олимпиада будет проходить 19.10, регистрация кончается 13.10.
UPD: не актуально.
Look at this: http://mirror.codeforces.com/submissions/Hossam.Ali . He's sending like 5 solutions every minute. I think he's using codeforces API. Probably authors of API forgot to set query limit.