У нас есть howmanynums
номера. Мы должны определить, есть ли способ поместить '+'
и '-'
между ними таким образом, чтобы результат делился на заданное число mod
.
(предпочтительно делать это с помощью динамического программирования, но я просто считаю каждую последовательность с нуля, потому что очень мало времени и просто нужно, чтобы она работала).
int howmanynums, mod;
int ring(int num) {
if ((num >= 0) && (num <= mod - 1))
return num;
if (num >= mod) {
while (num >= mod)
num -= mod;
return num;
}
if (num < 0) {
while (num < 0)
num += mod;
return num;
}
}
long int p(int n) {
long int t = 1;
while (n > 0) {
t *= 2;
n--;
}
return t;
}
int sequence[10000][2];
int main() {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
scanf("%d%d%d", &howmanynums, &mod, &sequence[0][0]);
sequence[0][0] = ring(sequence[0][0]);
int temp;
int k = 1;
while (k < howmanynums) {
scanf("%d", &temp);
sequence[k][0] = ring(temp);
sequence[k][1] = ring(-temp);
k++;
}
long int x = (p(howmanynums - 1));
while (x > 0) {
long int a = sequence[0][0];
long int permutation = x;
long int insidePermutation = x % 2;
int l = 1;
while (l < howmanynums) {
a += sequence[l][insidePermutation];
l++;
permutation = permutation / 2;
insidePermutation = permutation % 2;
}
if (a % mod == 0) {
printf("%s", "Divisible");
goto e;
}
x--;
}
printf("%s", "Not divisible");
e:
return 0;
}
Проходит 10 тестов из 20. Я не знаю тестов.
Я также попытался заменить все целые на длинные, но результат тот же.
Где моя ошибка?