Треугольники Для формирования изображения в компьютерной графике используются простейшие поверхности в виде треугольника. В зависимости от уровня требуемой детализации и сложности поверхности каждый треугольник может быть разделен еще на четыре треугольника и этот процесс может повторятся многократно. На рисунке ниже показан пример такого разделения для уровня детализации n = 0, 1 и 2
Необходимо вычислить количество красных треугольников для заданного уровня детализации n.
Input format
В первой строке задано одно целое число n (0 ≤ n ≤ 1018) – уровень детализации.
Output format
Выведите одно число – остаток от деления количества красных треугольников на (109 + 7) для заданного уровня детализации n.
(данную задачу нужно запрограммировать на языке с++. я запрограммировала, но при тестировании выдает ошибку) #include #include using namespace std; typedef unsigned long long ul;
ul modexp(ul x, ul y, ul N) { if (y == 0) return 1; ul z = modexp(x, y / 2, N); if (y % 2 == 0) return (z*z) % N; else return (x*z*z) % N; }
int main() { ul n, res; cin >> n;
ul levels = n*2; res = (((1+levels)*levels))/2; res = modexp(res, 1, pow(10,9) + 7); cout << res<}
1. Задача решается с стека (алгоритм Дейкстры для обработки обратной польской записи). Предполагается, что во вводимой строке содержится корректное выражение, удовлетворяющее условиям задания.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017 // Внимание! Если программа не работает, обновите версию!
begin var w:=ReadlnString.ToWords; var St:=new Stack <integer>; var r:=0; foreach var t in w do if t[1].IsDigit then St.Push(t.ToInteger) else begin var a:=St.Pop; var b:=St.Pop; case t[1] of '+':St.Push(a+b); '-':St.Push(b-a); '*':St.Push(a*b) end; end; Writeln(St.Pop) end.
Контрольный пример 8 9 + 1 7 - * -102
2. Задача крайне просто решается при регулярного выражения с рекурсией. Фактически вводить количество шаров не нужно, поэтому после ввода оно отбрасывается.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017 // Внимание! Если программа не работает, обновите версию!
begin Writeln(ReadlnString.ToWords.Skip(1).JoinIntoString(''). MatchValue('(.)\1{2,}').Length); end.
1. Задача решается с стека (алгоритм Дейкстры для обработки обратной польской записи). Предполагается, что во вводимой строке содержится корректное выражение, удовлетворяющее условиям задания.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017 // Внимание! Если программа не работает, обновите версию!
begin var w:=ReadlnString.ToWords; var St:=new Stack <integer>; var r:=0; foreach var t in w do if t[1].IsDigit then St.Push(t.ToInteger) else begin var a:=St.Pop; var b:=St.Pop; case t[1] of '+':St.Push(a+b); '-':St.Push(b-a); '*':St.Push(a*b) end; end; Writeln(St.Pop) end.
Контрольный пример 8 9 + 1 7 - * -102
2. Задача крайне просто решается при регулярного выражения с рекурсией. Фактически вводить количество шаров не нужно, поэтому после ввода оно отбрасывается.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017 // Внимание! Если программа не работает, обновите версию!
begin Writeln(ReadlnString.ToWords.Skip(1).JoinIntoString(''). MatchValue('(.)\1{2,}').Length); end.
Контрольный пример 5 2 3 3 3 1 3
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку