// (x{A,B}){C,D} -> x{E,F}
bool SimplifyNestedRepetition(int A, int B,
int C, int D,
out int E, out int F)
{
if (B == -1 || C == D || A*(C+1) <= B*C + 1)
{
E = A*C;
if (B == -1 || D == -1) F = -1;
else F = B*D;
return true;
}
return false;
}
- 無制限の場合
x{A,B}
、何度でも繰り返すことができます。
(x{A,B}){C}
常に還元可能です。
- の場合、最長の繰り返しシーケンスと最短の繰り返し
A*(C+1) <= B*C + 1
シーケンスの間にギャップがないため、それを減らすことができます。C
C+1
B = -1
orは、またはD == -1
のように無制限を意味します。x*
x{5,}
テストケース:
Input Reducible?
(x{0,0}){0,0} Yes - x{0,0}
(x{0,1}){0,0} Yes - x{0,0}
(x{0,2}){0,0} Yes - x{0,0}
(x{1,1}){0,0} Yes - x{0,0}
(x{1,2}){0,0} Yes - x{0,0}
(x{1,3}){0,0} Yes - x{0,0}
(x{2,2}){0,0} Yes - x{0,0}
(x{2,3}){0,0} Yes - x{0,0}
(x{2,4}){0,0} Yes - x{0,0}
(x{0,0}){0,1} Yes - x{0,0}
(x{0,1}){0,1} Yes - x{0,1}
(x{0,2}){0,1} Yes - x{0,2}
(x{1,1}){0,1} Yes - x{0,1}
(x{1,2}){0,1} Yes - x{0,2}
(x{1,3}){0,1} Yes - x{0,3}
(x{2,2}){0,1} No
(x{2,3}){0,1} No
(x{2,4}){0,1} No
(x{0,0}){0,2} Yes - x{0,0}
(x{0,1}){0,2} Yes - x{0,2}
(x{0,2}){0,2} Yes - x{0,4}
(x{1,1}){0,2} Yes - x{0,2}
(x{1,2}){0,2} Yes - x{0,4}
(x{1,3}){0,2} Yes - x{0,6}
(x{2,2}){0,2} No
(x{2,3}){0,2} No
(x{2,4}){0,2} No
(x{0,0}){1,1} Yes - x{0,0}
(x{0,1}){1,1} Yes - x{0,1}
(x{0,2}){1,1} Yes - x{0,2}
(x{1,1}){1,1} Yes - x{1,1}
(x{1,2}){1,1} Yes - x{1,2}
(x{1,3}){1,1} Yes - x{1,3}
(x{2,2}){1,1} Yes - x{2,2}
(x{2,3}){1,1} Yes - x{2,3}
(x{2,4}){1,1} Yes - x{2,4}
(x{0,0}){1,2} Yes - x{0,0}
(x{0,1}){1,2} Yes - x{0,2}
(x{0,2}){1,2} Yes - x{0,4}
(x{1,1}){1,2} Yes - x{1,2}
(x{1,2}){1,2} Yes - x{1,4}
(x{1,3}){1,2} Yes - x{1,6}
(x{2,2}){1,2} No
(x{2,3}){1,2} Yes - x{2,6}
(x{2,4}){1,2} Yes - x{2,8}
(x{0,0}){1,3} Yes - x{0,0}
(x{0,1}){1,3} Yes - x{0,3}
(x{0,2}){1,3} Yes - x{0,6}
(x{1,1}){1,3} Yes - x{1,3}
(x{1,2}){1,3} Yes - x{1,6}
(x{1,3}){1,3} Yes - x{1,9}
(x{2,2}){1,3} No
(x{2,3}){1,3} Yes - x{2,9}
(x{2,4}){1,3} Yes - x{2,12}
(x{0,0}){2,2} Yes - x{0,0}
(x{0,1}){2,2} Yes - x{0,2}
(x{0,2}){2,2} Yes - x{0,4}
(x{1,1}){2,2} Yes - x{2,2}
(x{1,2}){2,2} Yes - x{2,4}
(x{1,3}){2,2} Yes - x{2,6}
(x{2,2}){2,2} Yes - x{4,4}
(x{2,3}){2,2} Yes - x{4,6}
(x{2,4}){2,2} Yes - x{4,8}
(x{0,0}){2,3} Yes - x{0,0}
(x{0,1}){2,3} Yes - x{0,3}
(x{0,2}){2,3} Yes - x{0,6}
(x{1,1}){2,3} Yes - x{2,3}
(x{1,2}){2,3} Yes - x{2,6}
(x{1,3}){2,3} Yes - x{2,9}
(x{2,2}){2,3} No
(x{2,3}){2,3} Yes - x{4,9}
(x{2,4}){2,3} Yes - x{4,12}
(x{0,0}){2,4} Yes - x{0,0}
(x{0,1}){2,4} Yes - x{0,4}
(x{0,2}){2,4} Yes - x{0,8}
(x{1,1}){2,4} Yes - x{2,4}
(x{1,2}){2,4} Yes - x{2,8}
(x{1,3}){2,4} Yes - x{2,12}
(x{2,2}){2,4} No
(x{2,3}){2,4} Yes - x{4,12}
(x{2,4}){2,4} Yes - x{4,16}