Имеются два числа a и b, как найти (a/b) mod m?
#include <limits.h>
#include <stdio.h>
#include <string.h>
#define N (sizeof(a) / sizeof(a[0]))
inline int sign(int d)
{
if (d == 0)
return 0;
return d < 0 ? -1 : 1;
}
inline int abs(int v)
{
return v < 0 ? -v : v;
}
int main()
{
int a[] = {2, 1, 3, 4, 0};
int q[N];
for (;;) {
int best_profit = INT_MIN;
int best_src = -1;
int best_dst = -1;
int i, src, dst, tmp;
for (i = 0; i < N; ++i)
q[i] = i - a[i];
for (src = 0; src < N; ++src)
for (dst = 0; dst < N; ++dst) {
int d = sign(dst - src);
int profit = abs(q[src]) - abs(q[src] + dst - src);
//printf("...%d -> %d: profit = %d", src, dst, profit);
for (i = src + d; i != dst + d; i += d) {
if (sign(q[i]) == d) {
++profit;
//printf(" + 1");
} else {
--profit;
//printf(" - 1");
}
}
//printf(" = %d\n", profit);
if (profit > best_profit) {
best_src = src;
best_dst = dst;
best_profit = profit;
//printf("... -- new best!\n");
}
}
printf("%d -> %d (profit = %d)\n", best_src, best_dst, best_profit);
if (best_profit == 0)
break;
tmp = a[best_src];
if (best_dst < best_src)
memmove(a + best_dst + 1, a + best_dst, (best_src - best_dst) * sizeof(int));
else
memmove(a + best_src, a + best_src + 1, (best_dst - best_src) * sizeof(int));
a[best_dst] = tmp;
for (i = 0; i < N; ++i)
printf("%d ", a[i]);
printf("\n");
}
return 0;
}
из-за размера файла (например в 3Гб) не хватает памяти и соответственно этот вариант отпадает.
Хотелось бы понять в общих чертах откуда такая разница.
каждая нота обладает своей частотой
шаг между ними одинаковый (N герц)
Нота "До" следующей октавы имеет частоту в 2 раза выше ноты "До" текущей.
Зная частоту ноты "До" первой октавы, можно вычислить частоты для всех остальных нот.
Подозрительно, что значения частот нигде не упоминаются
Складывается впечатление, что у нот вообще нет фиксированных частот, что одна и та же частота может соответствовать разным нотам в разных ладах
,мои попытки не увенчались успехом,к сожалению
struct float_parts {
unsigned fraction:23;
unsigned exponent:8;
unsigned sign:1;
};
union float_and_parts {
float f;
struct float_parts parts;
};
Для начала как вооще строятся AST (абстрактное синтаксическое дерево) деревья? Что почитать?
Как создать парсер для языка, например SQL, который генерирует AST дерево и прощает синтаксические ошибки?
На входе обратная польская запись включающая в себя операторы, функции, скобочки и числа.
void quickSort(int arr[], int p, int r)
{
if (p < r) {
int q = partition(arr, p, r);
quickSort(arr, p, q);
quickSort(arr, q + 1, r);
}
}
int main()
{
for (int n = 2; n <= 10; ++n) {
int arr[10];
for (int i = 0; i < n; ++i)
arr[i] = i;
printf("n = %d\n", n);
do {
int sort[10];
memcpy(sort, arr, sizeof(arr));
quickSort(sort, 0, n);
for (int i = 1; i < n; ++i)
if (sort[i] < sort[i - 1])
printf("!\n");
} while (std::next_permutation(arr, arr + n));
}
return 0;
}