刷漆(乘法原理)

你的花园里有一个由N块排成一条直线的木板组成的栅栏,木板从左到右依次标号1到N。这N块木板中,有M块木板前面放着一桶油漆。油漆有不同的颜色,每种颜色可以由一个大写字母表示(A到Z)。而你要求XYN用他的油漆刷子给栅栏刷上油漆。
已知XYN会选择一个前方放有油漆桶的木板开始他的任务。刷子蘸上油漆后,他开始随机地沿着栅栏走,他不会走出栅栏的范围。随机地走表示XYN会沿着他选择的方向一直走,然后随机在任何时候改变方向。沿着栅栏走只有两个方向,向前和向后。
你发现XYN刷油漆的过程总是符吅下列规则:
• 每个油漆桶里装着无限多的油漆;
• 刷子上每次只有一种颜色的油漆,每次蘸油漆都会完全替换刷子上的油漆颜色;
• 当XYN走到一个油漆桶前,他会首先用刷子蘸这个油漆桶里的油漆;
• XYN每走过一个木板都会将这个木板刷成当前刷子上的油漆颜色。
已知木板可以被多次刷上油漆,每次都会完全覆盖前的颜色。当所有木板都被刷上了油漆的时候,XYN才能停下来(当然他也可以继续刷到他想停下来为止)。你看着XYN在栅栏前来回舞劢,突然想知道XYN停下来的时候栅栏有多少种可能的不同油漆方案。定义当至少有一块木板颜色不同时,两种油漆方案被视为是不同的。
请你输出不同的油漆方案数对109+9取模的值。
【输入】
输入文件为 paint.in。
输入的第一行包含两个整数N和M。
接下来M行,每行一对数据x和y,表示第y块木板前面有一个装着颜色为x的油漆的油漆桶。
【输出】
输出文件为 paint.out。
输出一行,包含一个整数,表示丌同的油漆方案数对109 + 9取模的结果。
【输入输出样例】
paint.in

6 2
A 2
B 6

paint.out

4

【数据范围】
对于30% 的数据,1 ≤ M ≤ N ≤ 100。

对于100% 的数据, 1 ≤ M ≤ N ≤ 100000。

x是A到Z间的大写字母;1 ≤ y ≤ N。

如图所示,两种不同的相邻油漆桶之间有多种方案,每个区间相互独立,所以运用乘法原理。

若两个相邻的油漆桶颜色相同,则忽略前一个区间。

WA错因分析:以为两个相邻的不同颜色的油漆桶只有最后停止的时候才有两种不同颜色的情况。

实际上无论什么时候都可能出现。

因为有迷之走位:

原文地址:https://www.cnblogs.com/Cindy-Chan/p/11285512.html