| № | Пользователь | Рейтинг |
|---|---|---|
| 1 | Benq | 3676 |
| 2 | Kevin114514 | 3659 |
| 3 | jiangly | 3640 |
| 4 | turmax | 3450 |
| 5 | tourist | 3382 |
| 6 | strapple | 3360 |
| 7 | Um_nik | 3354 |
| 8 | squareOf105 | 3348 |
| 9 | heuristica | 3322 |
| 10 | maroonrk | 3312 |
| Страны | Города | Организации | Всё → |
| № | Пользователь | Вклад |
|---|---|---|
| 1 | Qingyu | 157 |
| 2 | nik_exists | 151 |
| 3 | maspy | 149 |
| 4 | AmShZ | 144 |
| 5 | Um_nik | 143 |
| 6 | Errichto | 139 |
| 7 | adamant | 137 |
| 8 | BledDest | 133 |
| 9 | maroonrk | 132 |
| 10 | Proof_by_QED | 131 |
| Название |
|---|



Суть решения у тебя неправильная. Как я помню квадратный корень не может выступать коэффициентом в рекуррентном соотношении.
UPD: Сорри написал не подумав
Сначала я поставил этому комментарию плюс, но потом понял, что он не по теме.
Изначально, в выражении присутствует квадратный корень, это верно. Кажется, что оно нелинейное. Но можно заметить, что
Таким образом, получаем линейную последовательность для нахождения слагаемого с корнем. А, значит, и линейную последовательность для исходной задачи.
Правда, я пока не понял, почему даёт WA.
UPD: мучался с задачей полчаса, в итоге падают ассерты на 178 и 180 строке в коде. Видимо, тесты какие-то «хитрые».
UPD2: как-то зашаманил с кодом, получил AC (diff от оригинального решения в посте). Самое главное шаманство (устраняющее WA):
A[1][3] = sqrt(3 + static_cast<long double>(f0) * f1);Насчёт TL'a: мне нравится пользоваться трюком от Alex_2oo8. Суть в том, что если нам надо перемножить две матрицы А и В и положить результат в матрицу С, то будем брать С по модулю MOD * MOD (т.к. A[i][k] < MOD, B[k][j] < MOD => A[i][k] * B[k][j] < MOD * MOD). Это можно сделать без взятия по модулю вообще — достаточно одного if'a (если превысили MOD * MOD, то вычтем его один раз, поскольку большее количество не могло быть). В конце возьмём C[i][j] по модулю MOD. В итоге на каждый элемент матрицы по одному взятию по модулю.
Я когда-то рассказывал про оптимизацию таких вещей.
Теперь не по теме: мне хочется за такую работу с матрицами очень больно надавать по рукам. Матрицу можно представлять так:
И тогда получится код, который читать будет намного приятнее.
И да, в C++ и в современном C принято константы определять через
const, а не через#define.UPD. И еще меня смущает строчка
A[1][3] = sqrt(3 + f0 * f1);. Извлекать квадратный корень из целого числа таким способом вообще не следует. Рекомендую в данный момент воспользоваться бинпоиском, а потом на досуге разобраться с арифметикой с плавающей точкой и проблемами с приведением к целочисленному типу.sqrt работает заметно быстрее бинпоиска. Чтобы уладить возможные неточности из-за вещественных чисел, надо просто потом пустить по циклу while в каждую сторону.
Более того, конкретно в этой задаче достаточно одного цикла в большую сторону.