for (int dx = -1; dx <= 1; ++dx) {
for (int dy = -1; dy <= 1; ++dy) {
if (dx == 0 && dy == 0) continue;
int nx = (i + dx + height) % height;
int ny = (j + dy + SIZE) % SIZE;
neighbours += proc_states[iter][nx * SIZE + ny];
}
}
const int dx[8] = {0, 1, 1, 1, 0, -1, -1, -1};
const int dy[8] = { 1, 1, 0, -1, -1, -1, 0, 1};
...
for (int k = 0; k < 8; ++k) {
int nx = i + dx[k];
int ny = j + dy[k];
...
}
(i + dx + SIZE) % SIZE
есть лишний +SIZE
, ибо -1 % SIZE == -1
и чтобы для 0 предыдущее значение было SIZE-1 надо прибавить лишний SIZE под модулем. defineCode(std::cout << 13 << std::endl); // work
defineCode(stringLine);
заменяется просто на stringLine
, что есть бессмысленное выражение, вырезаемое еще на этапе компиляции. ++i
быстрее. Практически - нет, потому что компиляторы могут и то и другое соптимизировать в одни и те же ассемблерные инструкции в большинстве случаев. Исключение, если инкримент используется в выражении. Но тогда они не взаимозаменяемы. Еще может быть случай, если i какого-то странного типа и инкрименты перегружены и криво написаны. Или если оптимизация отключена при компиляции. Или у вас доисторический компилятор. (x1(t),y1(t))=(x1+vx1*t, y1+vy1*t)
(x1(t)-x2(t))^2+(y1(t)-y2(t))^2 = 4*r^2
.float t1 = (0.5 * Lxmax - (cords[i].x + r)) / cords[i].vx;
float t2 = (-0.5 * Lxmax - (cords[i].x - r)) / cords[i].vx;
Box() : Figure( (const bool[4][4]){
{0, 0, 0, 0},
{0, 1, 1, 0},
{0, 1, 1, 0},
{0, 0, 0, 0}
}, "Box") {};
brick = (OBJECT*)realloc(brick, sizeof(*brick) * brickLength);
brick = new Object[brickLength];
delete[]
.std::vector<Object>
. (long long int*) calloc(len_s1, sizeof(int));
вы выделяете массив int на len_s1 элементов, а потом работаете с ним, как с массивом long long той же длины. Но long long занимает больше байт! Поэтому вы выделяете меньше памяти, чем используете, а это UB. O(n^2)
. Вы для каждого числа в массиве считатете, сколько раз оно туда входит проходя по массиву через nums.count(i)
. Оптимальное же решение работает O(n)
. Надо в хеш-таблице подсчитать, сколько раз каждое число встречается, потом через алгоритм QuickSelect выбрать k-ый c конца элемент.O(n log n)
отсортировать массив и потом за один проход подсчитать сколько раз каждое число встречается. Дальше можно второй раз отсортировать по количеству вхождений и выдать k-ый элемент. Это решение тоже пройдет. To better utilize memory, the list should include an array T=8 of structures representing a block