Нарисуем диаграмму Эйлера-Венна для всех запросов, содержащих Маркиз (см. вложение). Каждой области на диаграмме соответствует множество результатов, найденных по какому-либо запросу.
Нам необходимо найти общее число результатов, содержащих Маркиз, а также Граф ИЛИ Виконт. Глядя на диаграмму, понимаем, что если сложим количества результатов по запросам Граф, Виконт (круг + прямоугольник), то получим то, что надо, за исключением того, что область пересечения (Граф И Виконт) окажется посчитанной дважды. Тогда, чтобы получить верный ответ, нужно сложить количество ответов на запросы Граф, Виконт и вычесть количество ответов на запрос Граф И Виконт.
Procedure GetAB(x: integer; var a: integer; var b: integer); begin a := 0; b := 1; while x > 0 do begin a := a + 1; b := b * (x mod 100); x := x div 100; end; end;
var x, a, b: integer;
begin for x := 10000 to 2000000000 do begin GetAB(x, a, b); if (a = 3) and (b = 18) then Println(a, b, x); end; end.
2^3=8
N=8 => 8 символов